diff --git a/TRTC-API-Example/android/app/build.gradle b/TRTC-API-Example/android/app/build.gradle index 2e7121a..b97eb7a 100644 --- a/TRTC-API-Example/android/app/build.gradle +++ b/TRTC-API-Example/android/app/build.gradle @@ -25,7 +25,12 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdk 34 + compileSdk flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + packagingOptions { + pickFirst 'lib/**/libliteavsdk.so' + } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -36,7 +41,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.trtc_api_example" minSdkVersion flutter.minSdkVersion - targetSdkVersion 31 + targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName } diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/MainActivity.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/MainActivity.java index 281c30c..de645d6 100644 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/MainActivity.java +++ b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/MainActivity.java @@ -1,179 +1,6 @@ package com.example.trtc_api_example; -import android.content.Intent; -import android.os.Bundle; import io.flutter.embedding.android.FlutterActivity; -import io.flutter.embedding.engine.FlutterEngine; -import io.flutter.plugin.common.MethodCall; -import io.flutter.plugin.common.MethodChannel; - -import com.tencent.live.beauty.custom.ITXCustomBeautyProcesserFactory; -import com.tencent.live.beauty.custom.ITXCustomBeautyProcesser; -import static com.tencent.live.beauty.custom.TXCustomBeautyDef.TXCustomBeautyBufferType; -import static com.tencent.live.beauty.custom.TXCustomBeautyDef.TXCustomBeautyPixelFormat; -import static com.tencent.live.beauty.custom.TXCustomBeautyDef.TXCustomBeautyVideoFrame; - -import com.tencent.trtc.TRTCCloud; -import com.tencent.trtc.TRTCCloudDef; -import com.tencent.trtc.TRTCCloudListener; -import com.tencent.trtc_demo.opengl.FrameBuffer; -import com.tencent.trtc_demo.opengl.GpuImageGrayscaleFilter; -import com.tencent.trtc_demo.opengl.OpenGlUtils; -import com.tencent.trtc_demo.opengl.Rotation; -import com.tencent.trtcplugin.TRTCCloudPlugin; -import java.nio.FloatBuffer; -import android.opengl.GLES20; -import android.util.Log; - -import androidx.annotation.NonNull; public class MainActivity extends FlutterActivity { - private static final String channelName = "TRCT_FLUTTER_EXAMPLE"; - - private MethodChannel channel; - - @Override - public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { - super.configureFlutterEngine(flutterEngine); - - // Access the onCapturedAudioFrame interface Step 1: Use MethodChannel to turn on or off custom audio processing - channel = new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), channelName); - channel.setMethodCallHandler(((call, result) -> { - switch (call.method) { - case "enableTRTCAudioFrameDelegate": - enableTRTCAudioFrameDelegate(call, result); - break; - case "disableTRTCAudioFrameDelegate": - disableTRTCAudioFrameDelegate(call, result); - break; - default: - break; - } - })); - } - - // Access the onCapturedAudioFrame interface Step 2.1 : set AudioFrameDelegate - void enableTRTCAudioFrameDelegate(MethodCall call, MethodChannel.Result result) { - TRTCCloud.sharedInstance(getApplicationContext()).setAudioFrameListener(new AudioFrameListener()); - result.success(""); - } - // Access the onCapturedAudioFrame interface Step 2.2 : remove AudioFrameDelegate - void disableTRTCAudioFrameDelegate(MethodCall call, MethodChannel.Result result) { - TRTCCloud.sharedInstance(getApplicationContext()).setAudioFrameListener(null); - result.success(""); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - startService(new Intent(this, MediaService.class)); - TUICallService.start(this); - TRTCCloudPlugin.register(new TXThirdBeauty()); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - TUICallService.stop(this); - } -} - -// Access the onCapturedAudioFrame interface Step 3: get audio frame & handle your business -class AudioFrameListener implements TRTCCloudListener.TRTCAudioFrameListener { - - @Override - public void onCapturedAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) { - // TODO - } - - @Override - public void onLocalProcessedAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) { - // TODO - } - - @Override - public void onRemoteUserAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame, String s) { - // TODO - } - - @Override - public void onMixedPlayAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) { - // TODO - } - - @Override - public void onMixedAllAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) { - // TODO - } - - @Override - public void onVoiceEarMonitorAudioFrame(TRTCCloudDef.TRTCAudioFrame trtcAudioFrame) { - // TODO - } -} - -class TXThirdBeauty implements ITXCustomBeautyProcesserFactory { - private BeautyProcessor customBeautyProcesser; - @Override - public ITXCustomBeautyProcesser createCustomBeautyProcesser() { - customBeautyProcesser = new BeautyProcessor(); - return customBeautyProcesser; - } - @Override - public void destroyCustomBeautyProcesser() { - if (null != customBeautyProcesser) { - customBeautyProcesser.destroy(); - customBeautyProcesser = null; - } - } -} -class BeautyProcessor implements ITXCustomBeautyProcesser { - private FrameBuffer mFrameBuffer; - private GpuImageGrayscaleFilter mGrayscaleFilter; - private FloatBuffer mGLCubeBuffer; - private FloatBuffer mGLTextureBuffer; - - @Override - public void onProcessVideoFrame(TXCustomBeautyVideoFrame srcFrame, TXCustomBeautyVideoFrame dstFrame) { - final int width = srcFrame.width; - final int height = srcFrame.height; - if (mFrameBuffer == null || mFrameBuffer.getWidth() != width || mFrameBuffer.getHeight() != height) { - if (mFrameBuffer != null) { - mFrameBuffer.uninitialize(); - } - mFrameBuffer = new FrameBuffer(width, height); - mFrameBuffer.initialize(); - } - if (mGrayscaleFilter == null) { - mGrayscaleFilter = new GpuImageGrayscaleFilter(); - mGrayscaleFilter.init(); - mGrayscaleFilter.onOutputSizeChanged(width, height); - - mGLCubeBuffer = OpenGlUtils.createNormalCubeVerticesBuffer(); - mGLTextureBuffer = OpenGlUtils.createTextureCoordsBuffer(Rotation.NORMAL, false, false); - } - GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFrameBuffer.getFrameBufferId()); - GLES20.glViewport(0, 0, width, height); - mGrayscaleFilter.onDraw(srcFrame.texture.textureId, mGLCubeBuffer, mGLTextureBuffer); - dstFrame.texture.textureId = mFrameBuffer.getTextureId(); - GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); - } - public void destroy() { - if (mFrameBuffer != null) { - mFrameBuffer.uninitialize(); - mFrameBuffer = null; - } - if (mGrayscaleFilter != null) { - mGrayscaleFilter.destroy(); - mGrayscaleFilter = null; - } - } - @Override - public TXCustomBeautyPixelFormat getSupportedPixelFormat() { - return TXCustomBeautyPixelFormat.TXCustomBeautyPixelFormatTexture2D; - } - @Override - public TXCustomBeautyBufferType getSupportedBufferType() { - return TXCustomBeautyBufferType.TXCustomBeautyBufferTypeTexture; - } } diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/MediaService.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/MediaService.java deleted file mode 100644 index 46d100d..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/MediaService.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.example.trtc_api_example; - -import android.app.Notification; -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.Build; -import android.os.IBinder; - -import androidx.core.app.NotificationCompat; - -public class MediaService extends Service { - private final String NOTIFICATION_CHANNEL_ID="com.example.trtc_api_example.MediaService"; - private final String NOTIFICATION_CHANNEL_NAME="com.example.trtc_api_example.channel_name"; - private final String NOTIFICATION_CHANNEL_DESC="com.example.trtc_api_example.channel_desc"; - public MediaService() { - } - - @Override - public void onCreate() { - super.onCreate(); - startNotification(); - } - - public void startNotification() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - //Call Start foreground with notification - Intent notificationIntent = new Intent(this, MediaService.class); -// PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); - PendingIntent pendingIntent = null; - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { - pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE); - } else { - pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); - } - NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) -// .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_foreground)) -// .setSmallIcon(R.drawable.ic_launcher_foreground) - .setContentTitle("Starting Service") - .setContentText("Starting monitoring service") - .setContentIntent(pendingIntent); - Notification notification = notificationBuilder.build(); - NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); - channel.setDescription(NOTIFICATION_CHANNEL_DESC); - NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.createNotificationChannel(channel); - startForeground(1, notification); //You must use this method to display the notification. You cannot use NotificationManager.notify, otherwise you will still report the above error - } - } - - @Override - public IBinder onBind(Intent intent) { - throw new UnsupportedOperationException("Not yet implemented"); - } -} \ No newline at end of file diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/TUICallService.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/TUICallService.java deleted file mode 100644 index 2966f6c..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/TUICallService.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.example.trtc_api_example; -import android.app.Notification; -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.Build; -import android.os.IBinder; - -import androidx.core.app.NotificationCompat; - -public class TUICallService extends Service { - private static final int NOTIFICATION_ID = 1001; - - @Override - public void onCreate() { - super.onCreate(); - Notification notification = createForegroundNotification(); - startForeground(NOTIFICATION_ID, notification); - } - - public static void start(Context context) { - Intent starter = new Intent(context, TUICallService.class); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - context.startForegroundService(starter); - } else { - context.startService(starter); - } - } - - public static void stop(Context context) { - Intent intent = new Intent(context, TUICallService.class); - context.stopService(intent); - } - - private Notification createForegroundNotification() { - NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - String notificationChannelId = "notification_channel_id_01"; - // System above Android8.0, new message channel - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - //The name of the channel visible to the user - String channelName = "TRTC Foreground Service Notification"; - //The importance of the channel - int importance = NotificationManager.IMPORTANCE_HIGH; - NotificationChannel notificationChannel = new NotificationChannel( - notificationChannelId, channelName, importance); - notificationChannel.setDescription("Channel description"); - //shock - notificationChannel.setVibrationPattern(new long[]{0, 1000, 500, 1000}); - notificationChannel.enableVibration(true); - if (notificationManager != null) { - notificationManager.createNotificationChannel(notificationChannel); - } - } - NotificationCompat.Builder builder = new NotificationCompat.Builder(this, notificationChannelId); - //Create notice and return - return builder.build(); - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - return START_NOT_STICKY; - } - - @Override - public IBinder onBind(Intent intent) { - throw new UnsupportedOperationException("Not yet implemented"); - } - - @Override - public void onTaskRemoved(Intent rootIntent) { - super.onTaskRemoved(rootIntent); - stopSelf(); - } -} diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/FrameBuffer.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/FrameBuffer.java deleted file mode 100644 index a826fe2..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/FrameBuffer.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.tencent.trtc_demo.opengl; - -import android.opengl.GLES20; -import android.util.Log; - -import static com.tencent.trtc_demo.opengl.GLConstants.NO_TEXTURE; - - -public class FrameBuffer { - - private static final String TAG = "FrameBuffer"; - - private final int mWidth; - private final int mHeight; - private int mTextureId; - private int mFrameBufferId; - - public FrameBuffer(int width, int height) { - mWidth = width; - mHeight = height; - } - - public void initialize() { - mTextureId = OpenGlUtils.loadTexture(GLES20.GL_RGBA, null, mWidth, mHeight, NO_TEXTURE); - mFrameBufferId = OpenGlUtils.generateFrameBufferId(); - Log.i(TAG, String.format("create frameBufferId: %d, textureId: %d", mFrameBufferId, mTextureId)); - - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureId); - GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFrameBufferId); - GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, - GLES20.GL_TEXTURE_2D, mTextureId, 0); - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); - GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); - } - - public int getTextureId() { - return mTextureId; - } - - public int getFrameBufferId() { - return mFrameBufferId; - } - - public int getWidth() { - return mWidth; - } - - public int getHeight() { - return mHeight; - } - - public void uninitialize() { - Log.i(TAG, String.format("destroy frameBufferId: %d, textureId: %d", mFrameBufferId, mTextureId)); - OpenGlUtils.deleteTexture(mTextureId); - mTextureId = NO_TEXTURE; - OpenGlUtils.deleteFrameBuffer(mFrameBufferId); - mFrameBufferId = NO_TEXTURE; - } -} diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/GLConstants.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/GLConstants.java deleted file mode 100644 index 7732ed7..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/GLConstants.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.tencent.trtc_demo.opengl; - -public interface GLConstants { - boolean DEBUG = false; - int NO_TEXTURE = -1; - int INVALID_PROGRAM_ID = -1; - - float[] CUBE_VERTICES_ARRAYS = { - -1.0f, -1.0f, - 1.0f, -1.0f, - -1.0f, 1.0f, - 1.0f, 1.0f - }; - - float[] TEXTURE_COORDS_NO_ROTATION = { - 0.0f, 0.0f, - 1.0f, 0.0f, - 0.0f, 1.0f, - 1.0f, 1.0f - }; - float[] TEXTURE_COORDS_ROTATE_LEFT = { - 1.0f, 0.0f, - 1.0f, 1.0f, - 0.0f, 0.0f, - 0.0f, 1.0f - }; - float[] TEXTURE_COORDS_ROTATE_RIGHT = { - 0.0f, 1.0f, - 0.0f, 0.0f, - 1.0f, 1.0f, - 1.0f, 0.0f - }; - float[] TEXTURE_COORDS_ROTATED_180 = { - 1.0f, 1.0f, - 0.0f, 1.0f, - 1.0f, 0.0f, - 0.0f, 0.0f - }; - - enum GLScaleType { - /** - * Due to the middle show, no cutting, wide or high -leaving black edge - */ - FIT_CENTER, - - /** - * Cut - */ - CENTER_CROP, - } -} diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/GPUImageFilter.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/GPUImageFilter.java deleted file mode 100644 index 3999038..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/GPUImageFilter.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (C) 2012 CyberAgent - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.tencent.trtc_demo.opengl; - -import android.opengl.GLES20; -import java.nio.FloatBuffer; -import java.util.LinkedList; - -import static com.tencent.trtc_demo.opengl.GLConstants.NO_TEXTURE; - -public class GPUImageFilter { - - public static final String NO_FILTER_VERTEX_SHADER = "" - + "attribute vec4 position;\n" - + "attribute vec4 inputTextureCoordinate;\n" - + " \n" - + "varying vec2 textureCoordinate;\n" - + " \n" - + "void main()\n" - + "{\n" - + " gl_Position = position;\n" - + " textureCoordinate = inputTextureCoordinate.xy;\n" - + "}"; - - public static final String NO_FILTER_FRAGMENT_SHADER = "" - + "varying highp vec2 textureCoordinate;\n" - + " \n" - + "uniform sampler2D inputImageTexture;\n" - + " \n" - + "void main()\n" - + "{\n" - + " gl_FragColor = texture2D(inputImageTexture, textureCoordinate);\n" - + "}"; - - public static final String NO_FILTER_FRAGMENT_SHADER_FLIP = "" - + "varying highp vec2 textureCoordinate;\n" - + " \n" - + "uniform sampler2D inputImageTexture;\n" - + " \n" - + "void main()\n" - + "{\n" - + " gl_FragColor = texture2D(inputImageTexture, vec2(textureCoordinate.x, 1.0 - textureCoordinate.y))" - + ";\n" - + "}"; - - - private final LinkedList mRunOnDraw; - protected final Program mProgram; - - protected float[] mTextureMatrix; - private int mGLAttribPosition; - private int mGLUniformTexture; - private int mGLAttribTextureCoordinate; - private boolean mIsInitialized; - - public GPUImageFilter() { - this(false); - } - - public GPUImageFilter(boolean flip) { - this(NO_FILTER_VERTEX_SHADER, flip ? NO_FILTER_FRAGMENT_SHADER_FLIP : NO_FILTER_FRAGMENT_SHADER); - } - - public GPUImageFilter(final String vertexShader, final String fragmentShader) { - mRunOnDraw = new LinkedList<>(); - mProgram = new Program(vertexShader, fragmentShader); - } - - public final void init() { - onInit(); - mIsInitialized = true; - } - - protected void onInit() { - mProgram.build(); - mGLAttribPosition = GLES20.glGetAttribLocation(mProgram.getProgramId(), "position"); - mGLUniformTexture = GLES20.glGetUniformLocation(mProgram.getProgramId(), "inputImageTexture"); - mGLAttribTextureCoordinate = GLES20.glGetAttribLocation(mProgram.getProgramId(), "inputTextureCoordinate"); - mIsInitialized = true; - } - - public void onOutputSizeChanged(final int width, final int height) { - } - - protected void onUninit() { - } - - public final void destroy() { - runPendingOnDrawTasks(); - onUninit(); - mIsInitialized = false; - mProgram.destroy(); - } - - public int getTarget() { - return GLES20.GL_TEXTURE_2D; - } - - public void setTexutreTransform(float[] matrix) { - mTextureMatrix = matrix; - } - - public boolean isInitialized() { - return mIsInitialized; - } - - /** - * Rendering - * - * @param textureId - * @param cubeBuffer - * @param textureBuffer - */ - public void onDraw(final int textureId, final FloatBuffer cubeBuffer, final FloatBuffer textureBuffer) { - GLES20.glUseProgram(mProgram.getProgramId()); - runPendingOnDrawTasks(); - if (!mIsInitialized) { - return; - } - - cubeBuffer.position(0); - GLES20.glVertexAttribPointer(mGLAttribPosition, 2, GLES20.GL_FLOAT, false, 0, cubeBuffer); - GLES20.glEnableVertexAttribArray(mGLAttribPosition); - textureBuffer.position(0); - GLES20.glVertexAttribPointer(mGLAttribTextureCoordinate, 2, GLES20.GL_FLOAT, false, 0, - textureBuffer); - GLES20.glEnableVertexAttribArray(mGLAttribTextureCoordinate); - - if (textureId != NO_TEXTURE) { - GLES20.glActiveTexture(GLES20.GL_TEXTURE0); - OpenGlUtils.bindTexture(getTarget(), textureId); - GLES20.glUniform1i(mGLUniformTexture, 0); - } - - beforeDrawArrays(textureId); - GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); - GLES20.glDisableVertexAttribArray(mGLAttribPosition); - GLES20.glDisableVertexAttribArray(mGLAttribTextureCoordinate); - - OpenGlUtils.bindTexture(getTarget(), 0); - } - - protected void beforeDrawArrays(int textureId) { - } - - protected void runPendingOnDrawTasks() { - // Copy the currently to run to the new array, and then start executing to prevent the execution from adding it again - LinkedList runList; - synchronized (mRunOnDraw) { - runList = new LinkedList<>(mRunOnDraw); - mRunOnDraw.clear(); - } - - while (!runList.isEmpty()) { - runList.removeFirst().run(); - } - } -} diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/GpuImageGrayscaleFilter.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/GpuImageGrayscaleFilter.java deleted file mode 100644 index f0e32fc..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/GpuImageGrayscaleFilter.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.tencent.trtc_demo.opengl; - -public class GpuImageGrayscaleFilter extends GPUImageFilter { - private static final String GRAY_SCALE_FRAGMENT_SHADER = "" - + "precision highp float;\n" - + "\n" - + "varying vec2 textureCoordinate;\n" - + "\n" - + "uniform sampler2D inputImageTexture;\n" - + "\n" - + "const highp vec3 W = vec3(0.2125, 0.7154, 0.0721);\n" - + "\n" - + "void main()\n" - + "{\n" - + " lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);\n" - + " float luminance = dot(textureColor.rgb, W);\n" - + "\n" - + " gl_FragColor = vec4(vec3(luminance), textureColor.a);\n" - + "}"; - - public GpuImageGrayscaleFilter() { - super(NO_FILTER_VERTEX_SHADER, GRAY_SCALE_FRAGMENT_SHADER); - } -} diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/OpenGlUtils.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/OpenGlUtils.java deleted file mode 100644 index b220f17..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/OpenGlUtils.java +++ /dev/null @@ -1,377 +0,0 @@ -package com.tencent.trtc_demo.opengl; - -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.opengl.GLES11Ext; -import android.opengl.GLES20; -import android.opengl.GLUtils; -import android.util.Log; -import android.util.Pair; - -import java.nio.Buffer; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.FloatBuffer; -import java.text.SimpleDateFormat; -import java.util.Date; - -import javax.microedition.khronos.opengles.GL10; - - -public class OpenGlUtils { - - private static final String TAG = "OpenGlUtils"; - private static final boolean DEBUG = false; - public static final int NO_TEXTURE = -1; - public static final int NOT_INIT = -1; - public static final int ON_DRAWN = 1; - - public static void bindTexture(int target, int texture) { - GLES20.glBindTexture(target, texture); - checkGlError("bindTexture(" + texture + ")"); - } - - public static void bindFramebuffer(int target, int framebuffer) { - GLES20.glBindFramebuffer(target, framebuffer); - checkGlError("bindTexture(" + framebuffer + ")"); - } - - public static int generateTextureOES() { - int[] texture = new int[1]; - GLES20.glGenTextures(1, texture, 0); - GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, texture[0]); - GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); - GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); - GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); - return texture[0]; - } - - public static int createTexture(int width, int height, int internalFormat, int format) { - int[] textureIds = new int[1]; - GLES20.glGenTextures(1, textureIds, 0); - if (DEBUG) { - Log.d(TAG, "glGenTextures textureId: " + textureIds[0]); - } - - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIds[0]); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - - GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, internalFormat, width, height, 0, format, GLES20.GL_UNSIGNED_BYTE, - null); - return textureIds[0]; - } - - /** - * Loading texture - * - * @param img - * @param usedTexId - * @param recycle - * @return - */ - public static int loadTexture(final Bitmap img, final int usedTexId, final boolean recycle) { - int[] textureArr = new int[1]; - if (usedTexId == NO_TEXTURE) { - GLES20.glGenTextures(1, textureArr, 0); - if (DEBUG) { - Log.d(TAG, "glGenTextures texture Id : " + textureArr[0]); - } - - bindTexture(GLES20.GL_TEXTURE_2D, textureArr[0]); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, img, 0); - } else { - bindTexture(GLES20.GL_TEXTURE_2D, usedTexId); - GLUtils.texSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, img); - textureArr[0] = usedTexId; - } - if (recycle) { - img.recycle(); - } - return textureArr[0]; - } - - /** - * Loading texture - * - * @param format - * @param data - * @param width - * @param height - * @param usedTexId - * @return - */ - public static int loadTexture(int format, Buffer data, int width, int height, int usedTexId) { - int[] textures = new int[1]; - if (usedTexId == NO_TEXTURE) { - GLES20.glGenTextures(1, textures, 0); - if (DEBUG) { - Log.d(TAG, "glGenTextures textureId: " + textures[0]); - } - - bindTexture(GLES20.GL_TEXTURE_2D, textures[0]); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, format, width, height, 0, format, GLES20.GL_UNSIGNED_BYTE, - data); - } else { - bindTexture(GLES20.GL_TEXTURE_2D, usedTexId); - GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, width, height, format, GLES20.GL_UNSIGNED_BYTE, data); - textures[0] = usedTexId; - } - return textures[0]; - } - - public static int generateFrameBufferId() { - int[] ids = new int[1]; - GLES20.glGenFramebuffers(1, ids, 0); - return ids[0]; - } - - public static void deleteTexture(int textureId) { - if (textureId != NO_TEXTURE) { - GLES20.glDeleteTextures(1, new int[]{textureId}, 0); - if (DEBUG) { - Log.d(TAG, "delete textureId " + textureId); - } - } - } - - public static void deleteFrameBuffer(int frameBufferId) { - if (frameBufferId != NO_TEXTURE) { - GLES20.glDeleteFramebuffers(1, new int[]{frameBufferId}, 0); - Log.d(TAG, "delete frame buffer id: " + frameBufferId); - } - } - - public static FloatBuffer createNormalCubeVerticesBuffer() { - return (FloatBuffer) ByteBuffer.allocateDirect(GLConstants.CUBE_VERTICES_ARRAYS.length * 4) - .order(ByteOrder.nativeOrder()) - .asFloatBuffer() - .put(GLConstants.CUBE_VERTICES_ARRAYS) - .position(0); - } - - public static FloatBuffer createTextureCoordsBuffer(Rotation rotation, boolean flipHorizontal, - boolean flipVertical) { - float[] temp = new float[GLConstants.TEXTURE_COORDS_NO_ROTATION.length]; - initTextureCoordsBuffer(temp, rotation, flipHorizontal, flipVertical); - - FloatBuffer buffer = ByteBuffer.allocateDirect(GLConstants.TEXTURE_COORDS_NO_ROTATION.length * 4) - .order(ByteOrder.nativeOrder()) - .asFloatBuffer(); - buffer.put(temp).position(0); - return buffer; - } - - /** - * By input and output width, calculate the vertex array and texture array - * - * @param scaleType Scaling - * @param inputRotation Enter the rotation angle of texture - * @param needFlipHorizontal Whether mirror mapping treatment - * @param inputWith Enter the width of the texture (unprocessed) - * @param inputHeight Enter the height of the texture (unprocessed) - * @param outputWidth The width of the target - * @param outputHeight High drawing goals - * @return Return to vertex arrays and texture arrays - */ - public static Pair calcCubeAndTextureBuffer(GLConstants.GLScaleType scaleType, - Rotation inputRotation, - boolean needFlipHorizontal, - int inputWith, - int inputHeight, - int outputWidth, - int outputHeight) { - - boolean needRotate = (inputRotation == Rotation.ROTATION_90 || inputRotation == Rotation.ROTATION_270); - int rotatedWidth = needRotate ? inputHeight : inputWith; - int rotatedHeight = needRotate ? inputWith : inputHeight; - float maxRratio = Math.max(1.0f * outputWidth / rotatedWidth, 1.0f * outputHeight / rotatedHeight); - float ratioWidth = 1.0f * Math.round(rotatedWidth * maxRratio) / outputWidth; - float ratioHeight = 1.0f * Math.round(rotatedHeight * maxRratio) / outputHeight; - - float[] cube = GLConstants.CUBE_VERTICES_ARRAYS; - float[] textureCoords = new float[GLConstants.TEXTURE_COORDS_ROTATE_RIGHT.length]; - initTextureCoordsBuffer(textureCoords, inputRotation, needFlipHorizontal, true); - if (scaleType == GLConstants.GLScaleType.CENTER_CROP) { - float distHorizontal = needRotate ? ((1 - 1 / ratioHeight) / 2) : ((1 - 1 / ratioWidth) / 2); - float distVertical = needRotate ? ((1 - 1 / ratioWidth) / 2) : ((1 - 1 / ratioHeight) / 2); - textureCoords = new float[]{ - addDistance(textureCoords[0], distHorizontal), - addDistance(textureCoords[1], distVertical), - addDistance(textureCoords[2], distHorizontal), - addDistance(textureCoords[3], distVertical), - addDistance(textureCoords[4], distHorizontal), - addDistance(textureCoords[5], distVertical), - addDistance(textureCoords[6], distHorizontal), - addDistance(textureCoords[7], distVertical),}; - } else { - cube = new float[]{cube[0] / ratioHeight, cube[1] / ratioWidth, - cube[2] / ratioHeight, cube[3] / ratioWidth, - cube[4] / ratioHeight, cube[5] / ratioWidth, - cube[6] / ratioHeight, cube[7] / ratioWidth,}; - } - return new Pair<>(cube, textureCoords); - } - - private static float addDistance(float coordinate, float distance) { - return coordinate == 0.0f ? distance : 1 - distance; - } - - /** - * Initialized texture - * - * @param textureCoords - * @param rotation - * @param flipHorizontal - * @param flipVertical - */ - public static void initTextureCoordsBuffer(float[] textureCoords, Rotation rotation, - boolean flipHorizontal, boolean flipVertical) { - float[] initRotation; - switch (rotation) { - case ROTATION_90: - initRotation = GLConstants.TEXTURE_COORDS_ROTATE_RIGHT; - break; - case ROTATION_180: - initRotation = GLConstants.TEXTURE_COORDS_ROTATED_180; - break; - case ROTATION_270: - initRotation = GLConstants.TEXTURE_COORDS_ROTATE_LEFT; - break; - case NORMAL: - default: - initRotation = GLConstants.TEXTURE_COORDS_NO_ROTATION; - break; - } - - System.arraycopy(initRotation, 0, textureCoords, 0, initRotation.length); - if (flipHorizontal) { - textureCoords[0] = flip(textureCoords[0]); - textureCoords[2] = flip(textureCoords[2]); - textureCoords[4] = flip(textureCoords[4]); - textureCoords[6] = flip(textureCoords[6]); - } - - if (flipVertical) { - textureCoords[1] = flip(textureCoords[1]); - textureCoords[3] = flip(textureCoords[3]); - textureCoords[5] = flip(textureCoords[5]); - textureCoords[7] = flip(textureCoords[7]); - } - } - - private static float flip(final float i) { - return i == 0.0f ? 1.0f : 0.0f; - } - - - public static int loadShader(final String strSource, final int iType) { - int[] compiled = new int[1]; - int iShader = GLES20.glCreateShader(iType); - GLES20.glShaderSource(iShader, strSource); - GLES20.glCompileShader(iShader); - GLES20.glGetShaderiv(iShader, GLES20.GL_COMPILE_STATUS, compiled, 0); - if (compiled[0] == 0) { - Log.w("Load Shader Failed", "Compilation\n" + GLES20.glGetShaderInfoLog(iShader)); - return 0; - } - return iShader; - } - - /** - * load program - * - * @param strVSource - * @param strFSource - * @return - */ - public static int loadProgram(final String strVSource, final String strFSource) { - int iVShader; - int iFShader; - - iVShader = loadShader(strVSource, GLES20.GL_VERTEX_SHADER); - if (iVShader == 0) { - Log.w("Load Program", "Vertex Shader Failed"); - return 0; - } - iFShader = loadShader(strFSource, GLES20.GL_FRAGMENT_SHADER); - if (iFShader == 0) { - Log.w("Load Program", "Fragment Shader Failed"); - return 0; - } - - int iProgId = GLES20.glCreateProgram(); - - GLES20.glAttachShader(iProgId, iVShader); - GLES20.glAttachShader(iProgId, iFShader); - - GLES20.glLinkProgram(iProgId); - - int[] link = new int[1]; - GLES20.glGetProgramiv(iProgId, GLES20.GL_LINK_STATUS, link, 0); - if (link[0] <= 0) { - Log.w("Load Program", "Linking Failed"); - return 0; - } - GLES20.glDeleteShader(iVShader); - GLES20.glDeleteShader(iFShader); - return iProgId; - } - - /** - * Create time watermark - * - * @param time - * @param width - * @param height - * @return - */ - public static Bitmap createTimeBitmap(long time, int width, int height) { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); - String timeStr = String.format("%s", dateFormat.format(new Date(time))); - Paint paint = new Paint(); - paint.setTextSize(40); - paint.setTextAlign(Paint.Align.LEFT); - paint.setColor(Color.RED); - paint.setAntiAlias(true); - - Paint.FontMetricsInt fm = paint.getFontMetricsInt(); - String[] arr = timeStr.split("\n"); - int maxWidth = 0; - for (String t : arr) { - maxWidth = (int) Math.max(maxWidth, paint.measureText(t)); - } - Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - for (int i = 0; i < arr.length; i++) { - canvas.drawText(arr[i], 130, (i + 1) * (fm.descent - fm.ascent) + 300, paint); - } - canvas.save(); - return bitmap; - } - - - public static void checkGlError(String op) { - if (!DEBUG) { - return; - } - - int error; - while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) { - Log.e(TAG, String.format("%s: glError %s", op, GLUtils.getEGLErrorString(error))); - } - } -} diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/Program.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/Program.java deleted file mode 100644 index 9d8e22a..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/Program.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.tencent.trtc_demo.opengl; - -import android.opengl.GLES20; -import android.util.Log; - - -public class Program { - - private static final String TAG = "Program"; - private static final int INVALID_PROGRAM_ID = -1; - private final String mVertexShader; - private final String mFragmentShader; - private int mProgramId; - - public Program(String vertexShader, String fragmentShader) { - mVertexShader = vertexShader; - mFragmentShader = fragmentShader; - mProgramId = INVALID_PROGRAM_ID; - } - - /** - * Build program - */ - public void build() { - int vertexShaderId = loadShader(mVertexShader, GLES20.GL_VERTEX_SHADER); - if (vertexShaderId == 0) { - Log.e(TAG, "load vertex shader failed."); - return; - } - - int fragmentShaderId = loadShader(mFragmentShader, GLES20.GL_FRAGMENT_SHADER); - if (fragmentShaderId == 0) { - Log.e(TAG, "load fragment shader failed."); - return; - } - - int programId = GLES20.glCreateProgram(); - GLES20.glAttachShader(programId, vertexShaderId); - GLES20.glAttachShader(programId, fragmentShaderId); - GLES20.glLinkProgram(programId); - - int[] link = new int[1]; - GLES20.glGetProgramiv(programId, GLES20.GL_LINK_STATUS, link, 0); - if (link[0] <= 0) { - Log.e(TAG, "link program failed. status: " + link[0]); - return; - } - - GLES20.glDeleteShader(vertexShaderId); - GLES20.glDeleteShader(fragmentShaderId); - mProgramId = programId; - } - - public int getProgramId() { - return mProgramId; - } - - public void destroy() { - GLES20.glDeleteProgram(mProgramId); - mProgramId = INVALID_PROGRAM_ID; - } - - private int loadShader(final String strSource, final int iType) { - int[] compiled = new int[1]; - int iShader = GLES20.glCreateShader(iType); - GLES20.glShaderSource(iShader, strSource); - GLES20.glCompileShader(iShader); - GLES20.glGetShaderiv(iShader, GLES20.GL_COMPILE_STATUS, compiled, 0); - if (compiled[0] == 0) { - OpenGlUtils.checkGlError("glCompileShader"); - return 0; - } - return iShader; - } -} diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/Rotation.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/Rotation.java deleted file mode 100644 index f346c85..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/Rotation.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2012 CyberAgent - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.tencent.trtc_demo.opengl; - -public enum Rotation { - NORMAL, ROTATION_90, ROTATION_180, ROTATION_270; - - /** - * Retrieves the int representation of the Rotation. - * - * @return 0, 90, 180 or 270 - */ - public int asInt() { - switch (this) { - case NORMAL: - return 0; - case ROTATION_90: - return 90; - case ROTATION_180: - return 180; - case ROTATION_270: - return 270; - default: - return 0; - } - } - - /** - * Create a Rotation from an integer. Needs to be either 0, 90, 180 or 270. - * - * @param rotation 0, 90, 180 or 270 - * @return Rotation object - */ - public static Rotation fromInt(int rotation) { - switch (rotation) { - case 0: - return NORMAL; - case 90: - return ROTATION_90; - case 180: - return ROTATION_180; - case 270: - return ROTATION_270; - case 360: - return NORMAL; - default: - return NORMAL; - } - } -} diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/helper/EGL10Helper.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/helper/EGL10Helper.java deleted file mode 100644 index 372181a..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/helper/EGL10Helper.java +++ /dev/null @@ -1,167 +0,0 @@ -package com.tencent.trtc_demo.opengl.helper; - -import android.util.Log; -import android.view.Surface; - -import javax.microedition.khronos.egl.EGL10; -import javax.microedition.khronos.egl.EGLConfig; -import javax.microedition.khronos.egl.EGLContext; -import javax.microedition.khronos.egl.EGLDisplay; -import javax.microedition.khronos.egl.EGLSurface; - -public class EGL10Helper implements EGLHelper { - - private static final String TAG = "EGL10Helper"; - - public static EGL10Helper createEGLSurface(EGLConfig config, EGLContext context, Surface surface, int width, - int height) { - EGL10Helper egl = new EGL10Helper(width, height); - if (egl.initialize(config, context, surface)) { - return egl; - } else { - return null; - } - } - - private final int mWidth; - private final int mHeight; - private EGLDisplay mEGLDisplay = EGL10.EGL_NO_DISPLAY; - private EGLContext mEGLContext = EGL10.EGL_NO_CONTEXT; - private EGLSurface mEGLSurface = EGL10.EGL_NO_SURFACE; - private EGL10 mEGL; - private EGLConfig mEGLConfig; - - private EGL10Helper(int width, int height) { - mWidth = width; - mHeight = height; - } - - @Override - public boolean swapBuffers() { - boolean ret = mEGL.eglSwapBuffers(mEGLDisplay, mEGLSurface); - checkEglError(); - return ret; - } - - @Override - public void makeCurrent() { - mEGL.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext); - checkEglError(); - } - - public void destroy() { - if (mEGLDisplay != EGL10.EGL_NO_DISPLAY) { - mEGL.eglMakeCurrent(mEGLDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT); - - if (mEGLSurface != EGL10.EGL_NO_SURFACE) { - mEGL.eglDestroySurface(mEGLDisplay, mEGLSurface); - mEGLSurface = EGL10.EGL_NO_SURFACE; - } - if (mEGLContext != EGL10.EGL_NO_CONTEXT) { - mEGL.eglDestroyContext(mEGLDisplay, mEGLContext); - mEGLContext = EGL10.EGL_NO_CONTEXT; - } - mEGL.eglTerminate(mEGLDisplay); - checkEglError(); - } - mEGLDisplay = EGL10.EGL_NO_DISPLAY; - } - - public void unmakeCurrent() { - if (mEGLDisplay != EGL10.EGL_NO_DISPLAY) { - mEGL.eglMakeCurrent(mEGLDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT); - } - } - - private boolean initialize(EGLConfig config, EGLContext context, Surface surface) { - mEGL = (EGL10) EGLContext.getEGL(); - mEGLDisplay = mEGL.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); - mEGL.eglInitialize(mEGLDisplay, new int[2]); - if (config == null) { - int[] numConfig = new int[1]; - EGLConfig[] configs = new EGLConfig[1]; - int[] configAttributes = surface == null ? ATTRIBUTES_FOR_OFFSCREEN_SURFACE : ATTRIBUTES_FOR_SURFACE; - mEGL.eglChooseConfig(mEGLDisplay, configAttributes, configs, 1, numConfig); - mEGLConfig = configs[0]; - } else { - mEGLConfig = config; - } - - int version = 2; - int[] attribList = { - EGL_CONTEXT_CLIENT_VERSION, version, - EGL10.EGL_NONE - }; - - if (context == null) { - context = EGL10.EGL_NO_CONTEXT; - } - mEGLContext = mEGL.eglCreateContext(mEGLDisplay, mEGLConfig, context, attribList); - if (mEGLContext == EGL10.EGL_NO_CONTEXT) { - checkEglError(); - return false; - } - - int[] attribListPbuffer = { - EGL10.EGL_WIDTH, mWidth, - EGL10.EGL_HEIGHT, mHeight, - EGL10.EGL_NONE - }; - if (surface == null) { - mEGLSurface = mEGL.eglCreatePbufferSurface(mEGLDisplay, mEGLConfig, attribListPbuffer); - } else { - mEGLSurface = mEGL.eglCreateWindowSurface(mEGLDisplay, mEGLConfig, surface, null); - } - if (mEGLSurface == EGL10.EGL_NO_SURFACE) { - checkEglError(); - return false; - } - - if (!mEGL.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext)) { - checkEglError(); - return false; - } - return true; - } - - @Override - public EGLContext getContext() { - return mEGLContext; - } - - public void checkEglError() { - int ec = mEGL.eglGetError(); - if (ec != EGL10.EGL_SUCCESS) { - Log.e(TAG, "EGL error: 0x" + Integer.toHexString(ec)); - } - } - - private static final int EGL_RECORDABLE_ANDROID = 0x3142; - private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098; - private static final int EGL_OPENGL_ES2_BIT = 4; - - - private static final int[] ATTRIBUTES_FOR_OFFSCREEN_SURFACE = { - EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT, // The front desk shows Surface here EGL10.EGL_WINDOW_BIT - EGL10.EGL_RED_SIZE, 8, - EGL10.EGL_GREEN_SIZE, 8, - EGL10.EGL_BLUE_SIZE, 8, - EGL10.EGL_ALPHA_SIZE, 8, - EGL10.EGL_DEPTH_SIZE, 0, - EGL10.EGL_STENCIL_SIZE, 0, - EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL10.EGL_NONE - }; - private static final int[] ATTRIBUTES_FOR_SURFACE = { - EGL10.EGL_SURFACE_TYPE, EGL10.EGL_WINDOW_BIT, // The front desk shows Surface here EGL10.EGL_WINDOW_BIT - EGL10.EGL_RED_SIZE, 8, - EGL10.EGL_GREEN_SIZE, 8, - EGL10.EGL_BLUE_SIZE, 8, - EGL10.EGL_ALPHA_SIZE, 8, - EGL10.EGL_DEPTH_SIZE, 0, - EGL10.EGL_STENCIL_SIZE, 0, - EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL_RECORDABLE_ANDROID, 1, - EGL10.EGL_NONE - }; -} diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/helper/EGL14Helper.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/helper/EGL14Helper.java deleted file mode 100644 index a75c520..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/helper/EGL14Helper.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.tencent.trtc_demo.opengl.helper; - -import android.annotation.TargetApi; -import android.opengl.EGL14; -import android.opengl.EGLConfig; -import android.opengl.EGLContext; -import android.opengl.EGLDisplay; -import android.opengl.EGLExt; -import android.opengl.EGLSurface; -import android.util.Log; -import android.view.Surface; - -import com.tencent.custom.customcapture.render.EGLHelper; - - -@TargetApi(17) -public class EGL14Helper implements EGLHelper { - - private static final String TAG = "EGL14Helper"; - - private static final int EGL_RECORDABLE_ANDROID = 0x3142; - private static final int GLES_VERSION = 2; - - public static EGL14Helper createEGLSurface(EGLConfig config, EGLContext context, Surface surface, int width, - int height) { - EGL14Helper egl = new EGL14Helper(width, height); - if (egl.initialize(config, context, surface)) { - return egl; - } else { - return null; - } - } - - private final int mWidth; - private final int mHeight; - private EGLConfig mEGLConfig = null; - private EGLDisplay mEGLDisplay = EGL14.EGL_NO_DISPLAY; - private EGLContext mEGLContext = EGL14.EGL_NO_CONTEXT; - private EGLSurface mEGLSurface; - - private EGL14Helper(int width, int height) { - mWidth = width; - mHeight = height; - } - - @Override - public void makeCurrent() { - if (mEGLDisplay == EGL14.EGL_NO_DISPLAY) { - // called makeCurrent() before create? - Log.d(TAG, "NOTE: makeCurrent w/o display"); - } - if (!EGL14.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext)) { - throw new RuntimeException("eglMakeCurrent failed"); - } - } - - @Override - public void destroy() { - if (mEGLDisplay != EGL14.EGL_NO_DISPLAY) { - // Android is unusual in that it uses a reference-counted EGLDisplay. So for - // every eglInitialize() we need an eglTerminate(). - EGL14.eglMakeCurrent(mEGLDisplay, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_CONTEXT); - if (mEGLSurface != EGL14.EGL_NO_SURFACE) { - EGL14.eglDestroySurface(mEGLDisplay, mEGLSurface); - mEGLSurface = EGL14.EGL_NO_SURFACE; - } - if (mEGLContext != EGL14.EGL_NO_CONTEXT) { - EGL14.eglDestroyContext(mEGLDisplay, mEGLContext); - mEGLContext = EGL14.EGL_NO_CONTEXT; - } - EGL14.eglReleaseThread(); - // TODO: 2016/10/14 for Samsumg S4, EGL14.eglReleaseThread() cause CRASH! - EGL14.eglTerminate(mEGLDisplay); - } - mEGLDisplay = EGL14.EGL_NO_DISPLAY; - } - - @Override - public boolean swapBuffers() { - return EGL14.eglSwapBuffers(mEGLDisplay, mEGLSurface); - } - - private boolean initialize(EGLConfig config, EGLContext context, Surface surface) { - mEGLDisplay = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY); - if (mEGLDisplay == EGL14.EGL_NO_DISPLAY) { - throw new RuntimeException("unable to get EGL14 display"); - } - - int[] version = new int[2]; - if (!EGL14.eglInitialize(mEGLDisplay, version, 0, version, 1)) { - mEGLDisplay = null; - throw new RuntimeException("unable to initialize EGL14"); - } - - if (config != null) { - mEGLConfig = config; - } else { - EGLConfig[] configs = new EGLConfig[1]; - int[] numConfigs = new int[1]; - int[] attribList = surface == null ? ATTRIBUTE_LIST_FOR_OFFSCREEN_SURFACE : ATTRIBUTE_LIST_FOR_SURFACE; - if (!EGL14.eglChooseConfig(mEGLDisplay, attribList, 0, configs, 0, configs.length, - numConfigs, 0)) { - return false; - } - mEGLConfig = configs[0]; - } - - if (context == null) { - context = EGL14.EGL_NO_CONTEXT; - } - int[] attribList = { - EGL14.EGL_CONTEXT_CLIENT_VERSION, GLES_VERSION, - EGL14.EGL_NONE - }; - mEGLContext = EGL14.eglCreateContext(mEGLDisplay, mEGLConfig, context, attribList, 0); - if (mEGLContext == EGL14.EGL_NO_CONTEXT) { - checkEGLError(); - return false; - } - - if (surface == null) { - int[] attribListPbuffer = { - EGL14.EGL_WIDTH, mWidth, - EGL14.EGL_HEIGHT, mHeight, - EGL14.EGL_NONE - }; - mEGLSurface = EGL14.eglCreatePbufferSurface(mEGLDisplay, mEGLConfig, attribListPbuffer, 0); - } else { - int[] surfaceAttribs = {EGL14.EGL_NONE}; - mEGLSurface = EGL14.eglCreateWindowSurface(mEGLDisplay, mEGLConfig, surface, surfaceAttribs, 0); - } - - checkEGLError(); - if (!EGL14.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext)) { - checkEGLError(); - return false; - } - return true; - } - - @Override - public void unmakeCurrent() { - if (mEGLDisplay != EGL14.EGL_NO_DISPLAY) { - EGL14.eglMakeCurrent(mEGLDisplay, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_CONTEXT); - } - } - - public void setPresentationTime(long nsecs) { - EGLExt.eglPresentationTimeANDROID(mEGLDisplay, mEGLSurface, nsecs); - } - - @Override - public EGLContext getContext() { - return mEGLContext; - } - - public EGLConfig getConfig() { - return mEGLConfig; - } - - private void checkEGLError() { - int ec = EGL14.eglGetError(); - if (ec != EGL14.EGL_SUCCESS) { - Log.e(TAG, "EGL error:" + ec); - throw new RuntimeException(": EGL error: 0x" + Integer.toHexString(ec)); - } - } - - private static final int[] ATTRIBUTE_LIST_FOR_SURFACE = { - EGL14.EGL_RED_SIZE, 8, - EGL14.EGL_GREEN_SIZE, 8, - EGL14.EGL_BLUE_SIZE, 8, - EGL14.EGL_ALPHA_SIZE, 8, - EGL14.EGL_DEPTH_SIZE, 0, - EGL14.EGL_STENCIL_SIZE, 0, - EGL14.EGL_RENDERABLE_TYPE, - GLES_VERSION == 2 ? EGL14.EGL_OPENGL_ES2_BIT : EGL14.EGL_OPENGL_ES2_BIT | EGLExt.EGL_OPENGL_ES3_BIT_KHR, - EGL_RECORDABLE_ANDROID, 1, - EGL14.EGL_NONE - }; - - private static final int[] ATTRIBUTE_LIST_FOR_OFFSCREEN_SURFACE = { - EGL14.EGL_SURFACE_TYPE, EGL14.EGL_PBUFFER_BIT,//The front desk shows Surface here EGL10.EGL_WINDOW_BIT - EGL14.EGL_RED_SIZE, 8, - EGL14.EGL_GREEN_SIZE, 8, - EGL14.EGL_BLUE_SIZE, 8, - EGL14.EGL_ALPHA_SIZE, 8, - EGL14.EGL_DEPTH_SIZE, 0, - EGL14.EGL_STENCIL_SIZE, 0, - EGL14.EGL_RENDERABLE_TYPE, - GLES_VERSION == 2 ? EGL14.EGL_OPENGL_ES2_BIT : EGL14.EGL_OPENGL_ES2_BIT | EGLExt.EGL_OPENGL_ES3_BIT_KHR, - EGL_RECORDABLE_ANDROID, 1, - EGL14.EGL_NONE - }; -} diff --git a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/helper/EGLHelper.java b/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/helper/EGLHelper.java deleted file mode 100644 index 02b13c7..0000000 --- a/TRTC-API-Example/android/app/src/main/java/com/example/trtc_api_example/opengl/helper/EGLHelper.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.tencent.trtc_demo.opengl.helper; - -/** - * Android has two sets of EGL classes. In order to facilitate use, they abstract them and only provide the following interfaces. - * - * @param - */ -public interface EGLHelper { - /** - * Return to EglContext to create shared EglContext, etc. - */ - T getContext(); - - /** - * Bind EglContext to the current thread, and Draw Surface and Read Surface saved in Helper. - */ - void makeCurrent(); - - /** - * Lift the current thread -bound EGLCONTEXT, Draw Surface, and Read Surface. - */ - void unmakeCurrent(); - - /** - * Brush the rendered content on the binding drawing target. - */ - boolean swapBuffers(); - - /** - * Destroy the created EglContext and related resources. - */ - void destroy(); -} diff --git a/TRTC-API-Example/android/build.gradle b/TRTC-API-Example/android/build.gradle index addc049..9c462d4 100644 --- a/TRTC-API-Example/android/build.gradle +++ b/TRTC-API-Example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.0.2' + classpath 'com.android.tools.build:gradle:7.2.0' } } diff --git a/TRTC-API-Example/android/gradle/wrapper/gradle-wrapper.properties b/TRTC-API-Example/android/gradle/wrapper/gradle-wrapper.properties index 595fb86..6b66533 100644 --- a/TRTC-API-Example/android/gradle/wrapper/gradle-wrapper.properties +++ b/TRTC-API-Example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/TRTC-API-Example/ios/Runner/AppDelegate.swift b/TRTC-API-Example/ios/Runner/AppDelegate.swift index d67286d..b636303 100644 --- a/TRTC-API-Example/ios/Runner/AppDelegate.swift +++ b/TRTC-API-Example/ios/Runner/AppDelegate.swift @@ -1,121 +1,13 @@ import UIKit import Flutter -import tencent_trtc_cloud -import TXCustomBeautyProcesserPlugin -import TXLiteAVSDK_Professional @main @objc class AppDelegate: FlutterAppDelegate { - - var channel: FlutterMethodChannel? - - override func application(_ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - lazy var customBeautyInstance: TRTCVideoCustomPreprocessor = { - let customBeautyInstance = TRTCVideoCustomPreprocessor() - customBeautyInstance.brightness = 0.5 - return customBeautyInstance - }() - TencentTRTCCloud.register(customBeautyProcesserFactory: customBeautyInstance) - GeneratedPluginRegistrant.register(with: self) - - // Access the onCapturedAudioFrame interface Step 1: Use MethodChannel to turn on or off custom audio processing - guard let controller = window?.rootViewController as? FlutterViewController else { - fatalError("Invalid root view controller") - } - channel = FlutterMethodChannel(name: "TRCT_FLUTTER_EXAMPLE", binaryMessenger: controller.binaryMessenger) - channel?.setMethodCallHandler({ [weak self] call, result in - guard let self = self else { return } - switch (call.method) { - case "enableTRTCAudioFrameDelegate": - self.enableTRTCAudioFrameDelegate(call: call, result: result) - break - case "disableTRTCAudioFrameDelegate": - self.disableTRTCAudioFrameDelegate(call: call, result: result) - break - default: - break - } - }) - //Objective-C: - // FlutterViewController *controller = (FlutterViewController *)self.window.rootViewController; - // FlutterMethodChannel *channel = [FlutterMethodChannel methodChannelWithName:@"TRCT_FLUTTER_EXAMPLE" binaryMessenger:[controller binaryMessenger]]; - // [channel setMethodCallHandler:^(FlutterMethodCall *call, FlutterResult result) { - // if ([@"enableTRTCAudioFrameDelegate" isEqualToString:call.method]) { - // [self enableTRTCAudioFrameDelegate:call result:result]; - // } else if ([@"disableTRTCAudioFrameDelegate" isEqualToString:call.method]) { - // [self disableTRTCAudioFrameDelegate:call result:result]; - // } - // }]; - - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } - - // Access the onCapturedAudioFrame interface Step 2.1 : set AudioFrameDelegate - let listener = AudioFrameProcessListener() - func enableTRTCAudioFrameDelegate(call: FlutterMethodCall, result: FlutterResult) { - TRTCCloud.sharedInstance().setAudioFrameDelegate(listener) - result(nil) - } - // Access the onCapturedAudioFrame interface Step 2.2 : remove AudioFrameDelegate - func disableTRTCAudioFrameDelegate(call: FlutterMethodCall, result: FlutterResult) { - TRTCCloud.sharedInstance().setAudioFrameDelegate(nil) - result(nil) - } - //Objective-C: - // AudioFrameProcessListener *listener = [AudioFrameProcessListener new]; - // - (void)enableTRTCAudioFrameDelegate:(FlutterMethodCall *)call result:(FlutterResult)result { - // [[TRTCCloud sharedInstance] setAudioFrameDelegate:listener]; - // result(nil); - // } - // - // - (void)disableTRTCAudioFrameDelegate:(FlutterMethodCall *)call result:(FlutterResult)result { - // [[TRTCCloud sharedInstance] setAudioFrameDelegate:nil]; - // result(nil); - // } - -} - -// Access the onCapturedAudioFrame interface Step 3: get audio frame & handle your business -class AudioFrameProcessListener: NSObject, TRTCAudioFrameDelegate { - func onCapturedAudioFrame(_ frame: TRTCAudioFrame) { - //MARK: TODO - print("TRTCAudioFrameDelegate onCapturedAudioFrame \(frame)") - } -} -//Objective-C: -//@interface AudioFrameProcessListener : NSObject -//@end -// -//@implementation AudioFrameProcessListener -//- (void)onCapturedAudioFrame:(TRTCAudioFrame *)frame { -// //MARK: TODO -// NSLog(@"TRTCAudioFrameDelegate onCapturedAudioFrame %@", frame); -//} -//@end - -extension TRTCVideoCustomPreprocessor: ITXCustomBeautyProcesserFactory { - public func createCustomBeautyProcesser() -> ITXCustomBeautyProcesser { - return self - } - - public func destroyCustomBeautyProcesser() { - invalidateBindedTexture() - } -} - -extension TRTCVideoCustomPreprocessor: ITXCustomBeautyProcesser { - public func getSupportedPixelFormat() -> ITXCustomBeautyPixelFormat { - return .Texture2D - } - - public func getSupportedBufferType() -> ITXCustomBeautyBufferType { - return .Texture - } - - public func onProcessVideoFrame(srcFrame: ITXCustomBeautyVideoFrame, dstFrame: ITXCustomBeautyVideoFrame) -> ITXCustomBeautyVideoFrame { - let outPutTextureId = processTexture(srcFrame.textureId, width: UInt32(srcFrame.width), height: UInt32(srcFrame.height)) - dstFrame.textureId = outPutTextureId - return dstFrame - } + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } } diff --git a/TRTC-API-Example/lib/Advanced/AudioFrameCustomProcess/AudioFrameCustomProcess.dart b/TRTC-API-Example/lib/Advanced/AudioFrameCustomProcess/AudioFrameCustomProcess.dart index 656451e..5777d83 100644 --- a/TRTC-API-Example/lib/Advanced/AudioFrameCustomProcess/AudioFrameCustomProcess.dart +++ b/TRTC-API-Example/lib/Advanced/AudioFrameCustomProcess/AudioFrameCustomProcess.dart @@ -3,9 +3,9 @@ import 'dart:ffi'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; class AudioFrameCustomProcessPage extends StatefulWidget { @@ -43,7 +43,6 @@ class _AudioFrameCustomProcessPageState extends State { bool isMuteLocalAudio = false; bool isSpeaker = true; late TRTCCloud trtcCloud; + late TRTCCloudListener listener; @override void initState() { startPushStream(); @@ -43,75 +44,28 @@ class _VideoCallingPageState extends State { params.userSig = await GenerateTestUserSig.genTestSig(params.userId); trtcCloud.callExperimentalAPI( "{\"api\": \"setFramework\", \"params\": {\"framework\": 7, \"component\": 2}}"); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL); + trtcCloud.enterRoom(params, TRTCAppScene.videoCall); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360; + encParams.videoResolution = TRTCVideoResolution.res_640_360; encParams.videoBitrate = 550; encParams.videoFps = 15; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startLocalAudio(TRTCAudioQuality.speech); + listener = getListener(); + trtcCloud.registerListener(listener); } - - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - onRemoteUserLeaveRoom(params["userId"], params['reason']); - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - } + + TRTCCloudListener getListener() { + return TRTCCloudListener( + onRemoteUserLeaveRoom: (userId, reason) { + onRemoteUserLeaveRoom(userId, reason); + }, + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + } + ); } onRemoteUserLeaveRoom(String userId, int reason) { @@ -135,12 +89,32 @@ class _VideoCallingPageState extends State { } } - destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - trtcCloud.unRegisterListener(onTrtcListener); - await TRTCCloud.destroySharedInstance(); + _showDialog() { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: Text('Notice'), + content: Text('New version not supported yet'), + actions: [ + TextButton( + child: Text('OK'), + onPressed: () { + Navigator.of(context).pop(); // 关闭对话框 + }, + ), + ], + ); + }, + ); + } + + destroyRoom() { + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + trtcCloud.unRegisterListener(listener); + TRTCCloud.destroySharedInstance(); } @override @@ -159,7 +133,6 @@ class _VideoCallingPageState extends State { Container( child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -192,10 +165,9 @@ class _VideoCallingPageState extends State { ), child: TRTCCloudVideoView( key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, - onViewCreated: (viewId) async { + onViewCreated: (viewId) { trtcCloud.startRemoteView(userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, viewId); + TRTCVideoStreamType.small, viewId); }, ), ); @@ -244,14 +216,15 @@ class _VideoCallingPageState extends State { backgroundColor: MaterialStateProperty.all(Colors.green), ), onPressed: () { - if (isOpenBeauty) { - trtcCloud.enableCustomVideoProcess(true); - } else { - trtcCloud.enableCustomVideoProcess(false); - } - setState(() { - isOpenBeauty = !isOpenBeauty; - }); + _showDialog(); + // if (isOpenBeauty) { + // trtcCloud.enableCustomVideoProcess(true); + // } else { + // trtcCloud.enableCustomVideoProcess(false); + // } + // setState(() { + // isOpenBeauty = !isOpenBeauty; + // }); }, child: Text(isOpenBeauty ? AppLocalizations.of(context)!.beauty_process_open : AppLocalizations.of(context)!.beauty_process_close), ), @@ -305,10 +278,10 @@ class _VideoCallingPageState extends State { bool newIsSpeaker = !isSpeaker; if (newIsSpeaker) { deviceManager.setAudioRoute( - TRTCCloudDef.TRTC_AUDIO_ROUTE_SPEAKER); + TXAudioRoute.speakerPhone); } else { deviceManager.setAudioRoute( - TRTCCloudDef.TRTC_AUDIO_ROUTE_EARPIECE); + TXAudioRoute.earpiece); } setState(() { isSpeaker = newIsSpeaker; diff --git a/TRTC-API-Example/lib/Advanced/JoinMultipleRoom/JoinMultipleRoomPage.dart b/TRTC-API-Example/lib/Advanced/JoinMultipleRoom/JoinMultipleRoomPage.dart index 2cb5ad4..4d1dfa3 100644 --- a/TRTC-API-Example/lib/Advanced/JoinMultipleRoom/JoinMultipleRoomPage.dart +++ b/TRTC-API-Example/lib/Advanced/JoinMultipleRoom/JoinMultipleRoomPage.dart @@ -1,235 +1,235 @@ -import 'dart:io'; - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; - -import '../../Debug/GenerateTestUserSig.dart'; - -/// JoinMultipleRoomPage.dart -/// TRTC-API-Example-Dart -class JoinMultipleRoomPage extends StatefulWidget { - const JoinMultipleRoomPage({Key? key}) : super(key: key); - - @override - _JoinMultipleRoomPageState createState() => _JoinMultipleRoomPageState(); -} - -class _JoinMultipleRoomPageState extends State { - - @override - void initState() { - // TODO: implement initState - super.initState(); - } - - - @override - void dispose() { - super.dispose(); - } - - @override - Widget build(BuildContext context) { - if (kIsWeb || Platform.isWindows || Platform.isWindows) { - return Center( - child: Text('The platform does not yet support multiple instances'), - ); - } - - return GridView.count( - crossAxisCount: 2, - crossAxisSpacing: 10.0, - mainAxisSpacing: 30.0, - padding: EdgeInsets.all(20.0), - childAspectRatio: 0.5, - children: [ - CustomTextFieldAndButton(defaultId: "147888"), - CustomTextFieldAndButton(defaultId: "147999"), - CustomTextFieldAndButton(defaultId: "147000"), - CustomTextFieldAndButton(defaultId: "147111"), - ], - ); - } -} - -class CustomTextFieldAndButton extends StatefulWidget { - String defaultId; - - CustomTextFieldAndButton({ - required String this.defaultId, - }); - - @override - _CustomTextFieldAndButtonState createState() => _CustomTextFieldAndButtonState(); -} - -class _CustomTextFieldAndButtonState extends State { - late TRTCCloud? cloud; - late TRTCCloud subCloud; - int? localViewId; - int? remoteViewId; - - bool _isEnterRoom = false; - String? _remoteUserId; - late TextEditingController _textEditingController; - - - @override - void initState() { - super.initState(); - initTRTCCloud(); - _textEditingController = TextEditingController(text: widget.defaultId); - } - - initTRTCCloud() async { - cloud = (await TRTCCloud.sharedInstance())!; - subCloud = await cloud!.createSubCloud(); - } - - - @override - void dispose() { - _textEditingController.dispose(); - subCloud.exitRoom(); - cloud?.destroySubCloud(subCloud); - super.dispose(); - } - - onTrtcListener(type, params) async { - if (type == TRTCCloudListener.onUserVideoAvailable) { - onUserVideoAvailable(params["userId"], params['available']); - } - } - - onUserVideoAvailable(String userId, bool available) { - if (available && _remoteUserId == null) { - subCloud.startRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, remoteViewId); - setState(() { - _remoteUserId = userId; - }); - } else if (!available && _remoteUserId == userId){ - subCloud.stopRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG); - setState(() { - _remoteUserId = null; - }); - } - } - - startPushStream(String roomId, String userId) async { - subCloud.startLocalPreview(true, localViewId); - TRTCParams params = new TRTCParams(); - params.sdkAppId = GenerateTestUserSig.sdkAppId; - params.roomId = int.parse(roomId); - params.userId = userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; - params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - subCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE); - - subCloud.registerListener(onTrtcListener); - } - - quitRoom() { - setState(() { - _remoteUserId = null; - }); - subCloud.exitRoom(); - } - - Widget buildEnterButton() { - return Row( - children: [ - Expanded( - flex: 5, - child: TextField( - controller: _textEditingController, - decoration: InputDecoration(), - ), - ), - Expanded( - flex: 4, - child: TextButton( - onPressed: () { - if (!_isEnterRoom) { - String time = DateTime.now().toString(); - String userId = time.substring(time.length - 8); - startPushStream(_textEditingController.text, userId); - } else { - quitRoom(); - } - setState(() { - _isEnterRoom = !_isEnterRoom; - }); - }, - child: Text(_isEnterRoom ? "Quit" : "Enter"), - ), - ), - ], - ); - } - - Widget showSign(String sign) { - return Positioned( - top: 0, - left: 0, - child: Text(sign, style: TextStyle(color: Colors.red),), - ); - } - - @override - Widget build(BuildContext context) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - flex: 2, - child: Stack( - children: [ - TRTCCloudVideoView( - key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, - onViewCreated: (viewId) async { - setState(() { - localViewId = viewId; - }); - }, - ), - !_isEnterRoom - ? Container(color: Colors.black,) - : showSign("local") - ], - ), - ), - Expanded( - flex: 2, - child: Stack( - children: [ - TRTCCloudVideoView( - key: ValueKey("RemoteView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, - onViewCreated: (viewId) async { - setState(() { - remoteViewId = viewId; - }); - }, - ), - (_remoteUserId == null || !_isEnterRoom) - ? Container(color: Colors.black,) - : showSign("remote") - ], - ), - ), - Expanded( - flex: 1, - child:buildEnterButton(), - ), - ], - ); - } - -} +// import 'dart:io'; +// +// import 'package:flutter/cupertino.dart'; +// import 'package:flutter/foundation.dart'; +// import 'package:flutter/material.dart'; +// import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +// import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +// import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +// import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; +// +// import '../../Debug/GenerateTestUserSig.dart'; +// +// /// JoinMultipleRoomPage.dart +// /// TRTC-API-Example-Dart +// class JoinMultipleRoomPage extends StatefulWidget { +// const JoinMultipleRoomPage({Key? key}) : super(key: key); +// +// @override +// _JoinMultipleRoomPageState createState() => _JoinMultipleRoomPageState(); +// } +// +// class _JoinMultipleRoomPageState extends State { +// +// @override +// void initState() { +// // TODO: implement initState +// super.initState(); +// } +// +// +// @override +// void dispose() { +// super.dispose(); +// } +// +// @override +// Widget build(BuildContext context) { +// if (kIsWeb || Platform.isWindows || Platform.isWindows) { +// return Center( +// child: Text('The platform does not yet support multiple instances'), +// ); +// } +// +// return GridView.count( +// crossAxisCount: 2, +// crossAxisSpacing: 10.0, +// mainAxisSpacing: 30.0, +// padding: EdgeInsets.all(20.0), +// childAspectRatio: 0.5, +// children: [ +// CustomTextFieldAndButton(defaultId: "147888"), +// CustomTextFieldAndButton(defaultId: "147999"), +// CustomTextFieldAndButton(defaultId: "147000"), +// CustomTextFieldAndButton(defaultId: "147111"), +// ], +// ); +// } +// } +// +// class CustomTextFieldAndButton extends StatefulWidget { +// String defaultId; +// +// CustomTextFieldAndButton({ +// required String this.defaultId, +// }); +// +// @override +// _CustomTextFieldAndButtonState createState() => _CustomTextFieldAndButtonState(); +// } +// +// class _CustomTextFieldAndButtonState extends State { +// late TRTCCloud? cloud; +// late TRTCCloud subCloud; +// int? localViewId; +// int? remoteViewId; +// +// bool _isEnterRoom = false; +// String? _remoteUserId; +// late TextEditingController _textEditingController; +// +// +// @override +// void initState() { +// super.initState(); +// initTRTCCloud(); +// _textEditingController = TextEditingController(text: widget.defaultId); +// } +// +// initTRTCCloud() async { +// cloud = (await TRTCCloud.sharedInstance())!; +// subCloud = await cloud!.createSubCloud(); +// } +// +// +// @override +// void dispose() { +// _textEditingController.dispose(); +// subCloud.exitRoom(); +// cloud?.destroySubCloud(subCloud); +// super.dispose(); +// } +// +// onTrtcListener(type, params) async { +// if (type == TRTCCloudListener.onUserVideoAvailable) { +// onUserVideoAvailable(params["userId"], params['available']); +// } +// } +// +// onUserVideoAvailable(String userId, bool available) { +// if (available && _remoteUserId == null) { +// subCloud.startRemoteView(userId, TRTCVideoStreamType.big, remoteViewId); +// setState(() { +// _remoteUserId = userId; +// }); +// } else if (!available && _remoteUserId == userId){ +// subCloud.stopRemoteView(userId, TRTCVideoStreamType.big); +// setState(() { +// _remoteUserId = null; +// }); +// } +// } +// +// startPushStream(String roomId, String userId) async { +// subCloud.startLocalPreview(true, localViewId); +// TRTCParams params = new TRTCParams(); +// params.sdkAppId = GenerateTestUserSig.sdkAppId; +// params.roomId = int.parse(roomId); +// params.userId = userId; +// params.role = TRTCRoleType.anchor; +// params.userSig = await GenerateTestUserSig.genTestSig(params.userId); +// subCloud.enterRoom(params, TRTCAppScene.live); +// +// subCloud.registerListener(onTrtcListener); +// } +// +// quitRoom() { +// setState(() { +// _remoteUserId = null; +// }); +// subCloud.exitRoom(); +// } +// +// Widget buildEnterButton() { +// return Row( +// children: [ +// Expanded( +// flex: 5, +// child: TextField( +// controller: _textEditingController, +// decoration: InputDecoration(), +// ), +// ), +// Expanded( +// flex: 4, +// child: TextButton( +// onPressed: () { +// if (!_isEnterRoom) { +// String time = DateTime.now().toString(); +// String userId = time.substring(time.length - 8); +// startPushStream(_textEditingController.text, userId); +// } else { +// quitRoom(); +// } +// setState(() { +// _isEnterRoom = !_isEnterRoom; +// }); +// }, +// child: Text(_isEnterRoom ? "Quit" : "Enter"), +// ), +// ), +// ], +// ); +// } +// +// Widget showSign(String sign) { +// return Positioned( +// top: 0, +// left: 0, +// child: Text(sign, style: TextStyle(color: Colors.red),), +// ); +// } +// +// @override +// Widget build(BuildContext context) { +// return Column( +// mainAxisAlignment: MainAxisAlignment.center, +// crossAxisAlignment: CrossAxisAlignment.center, +// children: [ +// Expanded( +// flex: 2, +// child: Stack( +// children: [ +// TRTCCloudVideoView( +// key: ValueKey("LocalView"), +// viewType: TRTCCloudDef.TRTC_VideoView_TextureView, +// onViewCreated: (viewId) async { +// setState(() { +// localViewId = viewId; +// }); +// }, +// ), +// !_isEnterRoom +// ? Container(color: Colors.black,) +// : showSign("local") +// ], +// ), +// ), +// Expanded( +// flex: 2, +// child: Stack( +// children: [ +// TRTCCloudVideoView( +// key: ValueKey("RemoteView"), +// viewType: TRTCCloudDef.TRTC_VideoView_TextureView, +// onViewCreated: (viewId) async { +// setState(() { +// remoteViewId = viewId; +// }); +// }, +// ), +// (_remoteUserId == null || !_isEnterRoom) +// ? Container(color: Colors.black,) +// : showSign("remote") +// ], +// ), +// ), +// Expanded( +// flex: 1, +// child:buildEnterButton(), +// ), +// ], +// ); +// } +// +// } diff --git a/TRTC-API-Example/lib/Advanced/LocalRecord/LocalRecordPage.dart b/TRTC-API-Example/lib/Advanced/LocalRecord/LocalRecordPage.dart index 5b801aa..cba81fa 100644 --- a/TRTC-API-Example/lib/Advanced/LocalRecord/LocalRecordPage.dart +++ b/TRTC-API-Example/lib/Advanced/LocalRecord/LocalRecordPage.dart @@ -6,14 +6,14 @@ import 'package:path_provider/path_provider.dart'; import 'package:permission_handler/permission_handler.dart'; // import 'package:image_gallery_saver/image_gallery_saver.dart'; import 'package:oktoast/oktoast.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Common/TXUpdateEvent.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; -import 'package:tencent_trtc_cloud/tx_audio_effect_manager.dart'; +import 'package:tencent_rtc_sdk/tx_audio_effect_manager.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; /// LocalRecordPage.dart @@ -27,6 +27,7 @@ class LocalRecordPage extends StatefulWidget { class _LocalRecordPageState extends State { late TRTCCloud trtcCloud; + late TRTCCloudListener listener; late TXAudioEffectManager audioEffectManager; int? localViewId; bool isStartPush = false; @@ -61,29 +62,30 @@ class _LocalRecordPageState extends State { } startPushStream() async { - trtcCloud.startLocalPreview(true, localViewId); + trtcCloud.startLocalPreview(true, localViewId!); TRTCParams params = new TRTCParams(); params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.roomId; params.userId = this.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE); + trtcCloud.enterRoom(params, TRTCAppScene.live); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540; + encParams.videoResolution = TRTCVideoResolution.res_960_540; // In TRTCVIDEORESOLUTION, only the horizontal screen resolution (such as 640 × 360) is defined. If you need to use a vertical screen resolution (such as 360 × 640), you need to specify the TRTCVIDEORESOLUTIONMODE to be Portrait. - encParams.videoResolutionMode = 1; + encParams.videoResolutionMode = TRTCVideoResolutionMode.portrait; encParams.videoFps = 24; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); + TRTCCloudListener listener = getListener(); + trtcCloud.registerListener(listener); } - stopPushStream() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); + stopPushStream() { + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); } startRecord() async { @@ -94,7 +96,7 @@ class _LocalRecordPageState extends State { if (file.existsSync()) file.deleteSync(); TRTCLocalRecordingParams recordParams = new TRTCLocalRecordingParams( filePath: filePath, - recordType: TRTCCloudDef.TRTCRecordTypeBoth, + recordType: TRTCLocalRecordType.both, interval: 1000); await trtcCloud.startLocalRecording(recordParams); showToast('Start recording', dismissOtherToast: true); @@ -109,7 +111,7 @@ class _LocalRecordPageState extends State { } stopRecord() async { - await trtcCloud.stopLocalRecording(); + trtcCloud.stopLocalRecording(); if (!kIsWeb && Platform.isIOS) { if (await Permission.photos.request().isGranted) { saveImage(); @@ -127,100 +129,13 @@ class _LocalRecordPageState extends State { } } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + }, + + ); } onUserVideoAvailable(String userId, bool available) { @@ -236,12 +151,12 @@ class _LocalRecordPageState extends State { } } - destroyRoom() async { - await trtcCloud.stopLocalRecording(); - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - await TRTCCloud.destroySharedInstance(); + destroyRoom() { + trtcCloud.stopLocalRecording(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + TRTCCloud.destroySharedInstance(); } @override @@ -286,7 +201,6 @@ class _LocalRecordPageState extends State { onTap: () {}, child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -322,11 +236,10 @@ class _LocalRecordPageState extends State { flex: 1, child: TRTCCloudVideoView( key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { trtcCloud.startRemoteView( userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, + TRTCVideoStreamType.small, viewId); }, ), diff --git a/TRTC-API-Example/lib/Advanced/PublishMediaStream/PublishMediaStreamAnchorPage.dart b/TRTC-API-Example/lib/Advanced/PublishMediaStream/PublishMediaStreamAnchorPage.dart index e9119d9..1fdfdb8 100644 --- a/TRTC-API-Example/lib/Advanced/PublishMediaStream/PublishMediaStreamAnchorPage.dart +++ b/TRTC-API-Example/lib/Advanced/PublishMediaStream/PublishMediaStreamAnchorPage.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Common/TXUpdateEvent.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; @@ -17,7 +17,8 @@ class PublishMediaStreamAnchorPage extends StatefulWidget { class _PublishMediaStreamAnchorPageState extends State { late TRTCCloud trtcCloud; - TRTCPublishMode currentMode = TRTCPublishMode.TRTCPublishMixStreamToRoom; + late TRTCCloudListener listener; + TRTCPublishMode currentMode = TRTCPublishMode.mixStreamToRoom; int? localViewId; bool isStartPush = false; bool isStartPublishMediaStream = false; @@ -51,7 +52,6 @@ class _PublishMediaStreamAnchorPageState extends State[]; @@ -541,11 +541,11 @@ class _PublishMediaStreamAnchorPageState extends State 0) { setPublishMode(currentMode); - } else { - trtcCloud.setMixTranscodingConfig(null); } setState(() {}); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onStartPublishMediaStream: - print( - "TRTCCloudListener.onStartPublishMediaStream: {taskId:${params["taskId"]}, code:${params["code"]}, message:${params["message"]}"); - publishMediaStreamTaskId = params["taskId"]; - break; - case TRTCCloudListener.onUpdatePublishMediaStream: - print( - "TRTCCloudListener.onUpdatePublishMediaStream: {taskId:${params["taskId"]}, code:${params["code"]}, message:${params["message"]}"); - break; - case TRTCCloudListener.onStopPublishMediaStream: - print( - "TRTCCloudListener.onStopPublishMediaStream: {taskId:${params["taskId"]}, code:${params["code"]}, message:${params["message"]}"); - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + }, + onStartPublishMediaStream: (taskId, errCode, errMsg, extraInfo) { + debugPrint("TRTCCloudListener.onStartPublishMediaStream: taskId:$taskId, code:$errCode, msg:$errMsg"); + publishMediaStreamTaskId = taskId; + }, + onUpdatePublishMediaStream: (taskId, errCode, errMsg, extraInfo) { + debugPrint("TRTCCloudListener.onUpdatePublishMediaStream: taskId:$taskId, code:$errCode, msg:$errMsg"); + }, + onStopPublishMediaStream: (taskId, errCode, errMsg, extraInfo) { + debugPrint("TRTCCloudListener.onStopPublishMediaStream: taskId:$taskId, code:$errCode, msg:$errMsg"); + } + ); } } diff --git a/TRTC-API-Example/lib/Advanced/PublishMediaStream/PublishMediaStreamAudiencePage.dart b/TRTC-API-Example/lib/Advanced/PublishMediaStream/PublishMediaStreamAudiencePage.dart index b63b57d..47f8e63 100644 --- a/TRTC-API-Example/lib/Advanced/PublishMediaStream/PublishMediaStreamAudiencePage.dart +++ b/TRTC-API-Example/lib/Advanced/PublishMediaStream/PublishMediaStreamAudiencePage.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -19,6 +19,7 @@ class _PublishMediaStreamAudiencePageState extends State remoteUidSet = {}; bool isEnterRoom = false; late TRTCCloud trtcCloud; + late TRTCCloudListener listener; @override void initState() { @@ -43,10 +44,9 @@ class _PublishMediaStreamAudiencePageState extends State 0) ? Container( child: TRTCCloudVideoView( - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { - trtcCloud.startRemoteView(remoteUidList[0], TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, viewId); + trtcCloud.startRemoteView(remoteUidList[0], TRTCVideoStreamType.small, viewId); }); }, ), @@ -77,9 +77,8 @@ class _PublishMediaStreamAudiencePageState extends State _PushCDNAnchorPageState(); -} - -class _PushCDNAnchorPageState extends State { - late TRTCCloud trtcCloud; - String currentMixConfig = 'picture'; - int? localViewId; - bool isStartPush = false; - int roomId = int.parse(TXHelper.generateRandomStrRoomId()); - String userId = TXHelper.generateRandomUserId(); - List remoteUidList = []; - Map remoteRenderParamsDic = {}; - - @override - void initState() { - initTRTCCloud(); - super.initState(); - eventBus.fire(TitleUpdateEvent('Room ID: $roomId')); - } - - initTRTCCloud() async { - trtcCloud = (await TRTCCloud.sharedInstance())!; - trtcCloud.registerListener(onTrtcListener); - } - - startPushStream() async { - trtcCloud.startLocalPreview(true, localViewId); - TRTCParams params = new TRTCParams(); - params.sdkAppId = GenerateTestUserSig.sdkAppId; - params.roomId = this.roomId; - params.userId = this.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; - params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - params.streamId = getStreamId(); - trtcCloud.callExperimentalAPI( - "{\"api\": \"setFramework\", \"params\": {\"framework\": 7, \"component\": 2}}"); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE); - - TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540; - // In TRTCVIDEORESOLUTION, only the horizontal screen resolution (such as 640 × 360) is defined. If you need to use a vertical screen resolution (such as 360 × 640), you need to specify the TRTCVIDEORESOLUTIONMODE to be Portrait. - encParams.videoResolutionMode = 1; - encParams.videoFps = 24; - trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); - } - - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - } - } - - onUserVideoAvailable(String userId, bool available) { - if (available) { - remoteUidList.add(userId); - } else { - remoteUidList.remove(userId); - } - - if(remoteUidList.length > 0) { - setMixConfig(currentMixConfig); - } else { - trtcCloud.setMixTranscodingConfig(null); - } - setState(() {}); - } - - destroyRoom() async { - trtcCloud.stopLocalPreview(); - trtcCloud.exitRoom(); - trtcCloud.unRegisterListener(onTrtcListener); - await TRTCCloud.destroySharedInstance(); - } - - @override - dispose() { - destroyRoom(); - super.dispose(); - } - - // Set the full manual typesetting mode - setMixConfigManual() { - TRTCTranscodingConfig config = new TRTCTranscodingConfig(); - config.videoWidth = 720; - config.videoHeight = 1280; - config.videoBitrate = 1500; - config.videoFramerate = 20; - config.videoGOP = 2; - config.audioSampleRate = 48000; - config.audioBitrate = 64; - config.audioChannels = 2; - config.streamId = getStreamId(); - config.appId = GenerateTestUserSig.appId; - config.bizId = GenerateTestUserSig.bizId; - config.backgroundColor = 0x000000; - config.backgroundImage = null; - - config.mode = TRTCCloudDef.TRTC_TranscodingConfigMode_Manual; - config.mixUsers = []; - - // Anchor itself - TRTCMixUser mixUser = new TRTCMixUser(); - mixUser.userId = this.userId; - mixUser.zOrder = 0; - mixUser.x = 0; - mixUser.y = 0; - mixUser.width = 720; - mixUser.height = 1280; - mixUser.roomId = this.roomId.toString(); - config.mixUsers?.add(mixUser); - - for(int i = 0; i < remoteUidList.length && i < 3; i++){ - TRTCMixUser remote = TRTCMixUser(); - remote.userId = remoteUidList[i]; - remote.streamType = TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG; - remote.zOrder = 1; - remote.x = 180 + i * 20; - remote.y = 400 + i * 20; - remote.width = 135; - remote.height = 240; - remote.roomId = this.roomId.toString(); - config.mixUsers!.add(remote); - } - trtcCloud.setMixTranscodingConfig(config); - } - - /// Set up mixed stream pre-row-left and right mode - setMixConfigLeftRight() { - TRTCTranscodingConfig config = TRTCTranscodingConfig(); - config.videoWidth = 720; - config.videoHeight = 640; - config.videoBitrate = 1500; - config.videoFramerate = 20; - config.videoGOP = 2; - config.audioSampleRate = 48000; - config.audioBitrate = 64; - config.audioChannels = 2; - - - config.streamId = getStreamId(); - - config.mode = TRTCCloudDef.TRTC_TranscodingConfigMode_Template_PresetLayout; - config.mixUsers = []; - - // Anchor itself - TRTCMixUser mixUser = TRTCMixUser(); - mixUser.userId = "\$PLACE_HOLDER_LOCAL_MAIN\$"; - mixUser.zOrder = 0; - mixUser.x = 0; - mixUser.y = 0; - mixUser.width = 360; - mixUser.height = 640; - mixUser.roomId = this.roomId.toString(); - config.mixUsers?.add(mixUser); - - - //Lianmai people screen location - TRTCMixUser remote = TRTCMixUser(); - remote.userId = "\$PLACE_HOLDER_REMOTE\$"; - remote.streamType = TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG; - remote.zOrder = 1; - remote.x = 360; - remote.y = 0; - remote.width = 360; - remote.height = 640; - remote.roomId = this.roomId.toString(); - config.mixUsers?.add(remote); - - trtcCloud.setMixTranscodingConfig(config); - } - - String getStreamId() { - String streamId = GenerateTestUserSig.sdkAppId.toString() + - '_' + - this.roomId.toString() + - '_' + - this.userId + - '_main'; - return streamId; - } - - /// Pre-Edition-Painting Chinese Painting - setMixConfigInPicture() { - TRTCTranscodingConfig config = TRTCTranscodingConfig(); - config.videoWidth = 720; - config.videoHeight = 1280; - config.videoBitrate = 1500; - config.videoFramerate = 20; - config.videoGOP = 2; - config.audioSampleRate = 48000; - config.audioBitrate = 64; - config.audioChannels = 2; - config.streamId = getStreamId(); - - config.mode = TRTCCloudDef.TRTC_TranscodingConfigMode_Template_PresetLayout; - config.mixUsers = []; - - // Anchor itself - TRTCMixUser mixUser = TRTCMixUser(); - mixUser.userId = "\$PLACE_HOLDER_LOCAL_MAIN\$"; - mixUser.zOrder = 0; - mixUser.x = 0; - mixUser.y = 0; - mixUser.width = 720; - mixUser.height = 1280; - mixUser.roomId = this.roomId.toString(); - config.mixUsers?.add(mixUser); - - - //Lianmai people screen location - TRTCMixUser remote = TRTCMixUser(); - remote.userId = "\$PLACE_HOLDER_REMOTE\$"; - remote.streamType = TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG; - - remote.zOrder = 1; - remote.x = 500; - remote.y = 150; - remote.width = 135; - remote.height = 240; - remote.roomId = this.roomId.toString(); - config.mixUsers?.add(remote); - - trtcCloud.setMixTranscodingConfig(config); - } - - Widget getButtonItem({ - required String tile, - required String value, - required Function onClick, - }) { - MaterialStateProperty greenColor = currentMixConfig == value ? - MaterialStateProperty.all(Colors.green) : MaterialStateProperty.all(Colors.grey); - - return ElevatedButton( - style: ButtonStyle( - textStyle: MaterialStateProperty.all( - TextStyle(fontSize: 12), - ), - padding: MaterialStateProperty.all( - EdgeInsets.only(left: 0, right: 0), - ), - backgroundColor: greenColor, - ), - onPressed: () { - onClick(value); - }, - child: Text(tile), - ); - } - - setMixConfig(value) { - setState(() { - currentMixConfig = value; - }); - if(value == 'manual') { - setMixConfigManual(); - } else if(value == 'leftRight') { - setMixConfigLeftRight(); - } else if(value == 'picture') { - setMixConfigInPicture(); - } - } - - getBGWidgetList() { - return [ - getButtonItem( - tile: AppLocalizations.of(context)!.pushcdn_anchor_mixconfig_manual, - value: "manual", - onClick: setMixConfig, - ), - SizedBox( - width: 20, - ), - getButtonItem( - tile: AppLocalizations.of(context)!.pushcdn_anchor_mixconfig_left_right, - value: "leftRight", - onClick: setMixConfig, - ), - SizedBox( - width: 20, - ), - getButtonItem( - tile: AppLocalizations.of(context)!.pushcdn_anchor_mixconfig_in_picture, - value: "picture", - onClick: setMixConfig, - ), - ]; - } - - onPushStreamClick() { - bool newIsStartPush = !isStartPush; - isStartPush = newIsStartPush; - if (isStartPush) { - startPushStream(); - } else { - remoteRenderParamsDic.clear(); - remoteUidList = []; - trtcCloud.unRegisterListener(onTrtcListener); - trtcCloud.stopLocalAudio(); - trtcCloud.stopLocalPreview(); - trtcCloud.exitRoom(); - } - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return Stack( - alignment: Alignment.topLeft, - fit: StackFit.expand, - children: [ - GestureDetector( - behavior: HitTestBehavior.translucent, - onTap: () {}, - child: TRTCCloudVideoView( - key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, - onViewCreated: (viewId) async { - setState(() { - localViewId = viewId; - }); - }, - ), - ), - Positioned( - left: 10, - top: 15, - width: 72, - height: 370, - child: Container( - child: GridView.builder( - itemCount: remoteUidList.length, - shrinkWrap: true, - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 1, - childAspectRatio: 0.6, - ), - itemBuilder: (BuildContext context, int index) { - String userId = remoteUidList[index]; - return ConstrainedBox( - constraints: BoxConstraints( - maxWidth: 72, - minWidth: 72, - maxHeight: 120, - minHeight: 120, - ), - child: Stack( - children: [ - TRTCCloudVideoView( - key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, - onViewCreated: (viewId) async { - trtcCloud.startRemoteView( - userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, - viewId); - }, - ), - Positioned( - left: 0, - top: 0, - child: Text( - userId, - style: TextStyle( - color: Colors.red, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ); - }, - ), - ), - ), - Positioned( - left: 0, - height: 190, - bottom: 15, - child: Container( - padding: EdgeInsets.only(left: 15, right: 15), - width: MediaQuery.of(context).size.width, - height: 200, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.max, - children: [ - Row( - children: [ - Text(AppLocalizations.of(context)!.pushcdn_anchor_mixconfig_disabled), - ], - ), - Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.start, - children: getBGWidgetList(), - ), - const SizedBox(height: 20), - Row( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.end, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - SizedBox( - width: 100, - child: TextField( - autofocus: false, - enabled: !isStartPush, - decoration: InputDecoration( - labelStyle: TextStyle(color: Colors.white), - labelText: "Room ID", - ), - controller: TextEditingController.fromValue( - TextEditingValue( - text: this.roomId.toString(), - selection: TextSelection.fromPosition( - TextPosition( - affinity: TextAffinity.downstream, - offset: this.roomId.toString().length, - ), - ), - ), - ), - style: TextStyle(color: Colors.white), - keyboardType: TextInputType.number, - onChanged: (value) { - roomId = int.parse(value); - eventBus.fire(TitleUpdateEvent('Room ID: $roomId')); - }, - ), - ), - SizedBox( - width: 100, - child: TextField( - autofocus: false, - enabled: !isStartPush, - decoration: InputDecoration( - labelText: "User ID", - labelStyle: TextStyle(color: Colors.white), - ), - controller: TextEditingController.fromValue( - TextEditingValue( - text: this.userId, - selection: TextSelection.fromPosition( - TextPosition( - affinity: TextAffinity.downstream, - offset: this.userId.length, - ), - ), - ), - ), - style: TextStyle(color: Colors.white), - keyboardType: TextInputType.text, - onChanged: (value) { - userId = value; - }, - ), - ), - SizedBox( - width: 100, - child: ElevatedButton( - style: ButtonStyle( - backgroundColor: - MaterialStateProperty.all(Colors.green), - ), - onPressed: () { - onPushStreamClick(); - }, - child: Text(isStartPush ? AppLocalizations.of(context)!.stop_push : AppLocalizations.of(context)!.start_push), - ), - ), - ], - ), - ], - ), - ), - ), - ], - ); - } -} diff --git a/TRTC-API-Example/lib/Advanced/PushCDN/PushCDNAudiencePage.dart b/TRTC-API-Example/lib/Advanced/PushCDN/PushCDNAudiencePage.dart deleted file mode 100644 index 8bbe67e..0000000 --- a/TRTC-API-Example/lib/Advanced/PushCDN/PushCDNAudiencePage.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; - -/// PushCDNAudiencePage.dart -/// TRTC-API-Example-Dart -class PushCDNAudiencePage extends StatefulWidget { - const PushCDNAudiencePage({Key? key}) : super(key: key); - - @override - _PushCDNAudiencePageState createState() => _PushCDNAudiencePageState(); -} - -class _PushCDNAudiencePageState extends State { - @override - Widget build(BuildContext context) { - return Center( - child: Text(AppLocalizations.of(context)!.pushcdn_play), - ); - } -} diff --git a/TRTC-API-Example/lib/Advanced/PushCDN/PushCDNSelectRolePage.dart b/TRTC-API-Example/lib/Advanced/PushCDN/PushCDNSelectRolePage.dart deleted file mode 100644 index 621a141..0000000 --- a/TRTC-API-Example/lib/Advanced/PushCDN/PushCDNSelectRolePage.dart +++ /dev/null @@ -1,71 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:trtc_api_example/Advanced/PushCDN/PushCDNAudiencePage.dart'; -import 'package:trtc_api_example/Common/ExampleData.dart'; -import 'package:trtc_api_example/Common/ExamplePageLayout.dart'; -import './PushCDNAnchorPage.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; - -/// PushCDNSelectRolePage.dart -/// TRTC-API-Example-Dart -class PushCDNSelectRolePage extends StatefulWidget { - const PushCDNSelectRolePage({Key? key}) : super(key: key); - - @override - _PushCDNSelectRolePageState createState() => _PushCDNSelectRolePageState(); -} - -class _PushCDNSelectRolePageState extends State { - @override - Widget build(BuildContext context) { - final ButtonStyle style = - ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20)); - ExamplePageItem anchorPage = ExamplePageItem( - title: 'Room ID: ', - detailPage: PushCDNAnchorPage(), - ); - ExamplePageItem audiencePage = ExamplePageItem( - title: 'Audience page', - detailPage: PushCDNAudiencePage(), - ); - return Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text(AppLocalizations.of(context)!.pushcdn_select_role_guide), - const SizedBox(height: 30), - ElevatedButton( - style: style, - onPressed: () { - Navigator.push( - context, - new MaterialPageRoute( - builder: (context) => ExamplePageLayout( - examplePageData: anchorPage, - ), - ), - ); - }, - child: Text(AppLocalizations.of(context)!.pushcdn_select_role_anchor_choice), - ), - const SizedBox(height: 10), - ElevatedButton( - style: style, - onPressed: () { - Navigator.push( - context, - new MaterialPageRoute( - builder: (context) => ExamplePageLayout( - examplePageData: audiencePage, - ), - ), - ); - }, - child: Text(AppLocalizations.of(context)!.pushcdn_select_role_audience_choice), - ), - const SizedBox(height: 20), - Text(AppLocalizations.of(context)!.pushcdn_select_role_result), - ], - ), - ); - } -} diff --git a/TRTC-API-Example/lib/Advanced/RoomPk/RoomPkPage.dart b/TRTC-API-Example/lib/Advanced/RoomPk/RoomPkPage.dart index 0916b9a..f60b102 100644 --- a/TRTC-API-Example/lib/Advanced/RoomPk/RoomPkPage.dart +++ b/TRTC-API-Example/lib/Advanced/RoomPk/RoomPkPage.dart @@ -2,10 +2,10 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:oktoast/oktoast.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Common/TXUpdateEvent.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; @@ -22,6 +22,7 @@ class RoomPkPage extends StatefulWidget { class _RoomPkPageState extends State { late TRTCCloud trtcCloud; + late TRTCCloudListener listener; int? localViewId; bool isStartPush = false; bool isStartPK = false; @@ -43,121 +44,35 @@ class _RoomPkPageState extends State { } startPushStream() async { - trtcCloud.startLocalPreview(true, localViewId); + trtcCloud.startLocalPreview(true, localViewId!); TRTCParams params = new TRTCParams(); params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.roomId; params.userId = this.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE); + trtcCloud.enterRoom(params, TRTCAppScene.live); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1280_720; + encParams.videoResolution = TRTCVideoResolution.res_1280_720; encParams.videoBitrate = 1500; encParams.videoFps = 24; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startLocalAudio(TRTCAudioQuality.defaultMode); + listener = getListener(); + trtcCloud.registerListener(listener); eventBus.fire(TitleUpdateEvent('Room ID: $roomId')); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - onConnectOtherRoom( - params['userId'], params['errCode'], params['errMsg']); - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onConnectOtherRoom: (userId, errCode, errMsg) { + onConnectOtherRoom(userId, errCode, errMsg); + }, + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + }, + ); } onUserVideoAvailable(String userId, bool available) { @@ -186,11 +101,11 @@ class _RoomPkPageState extends State { } } - destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - await TRTCCloud.destroySharedInstance(); + destroyRoom() { + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + TRTCCloud.destroySharedInstance(); } @override @@ -206,7 +121,7 @@ class _RoomPkPageState extends State { startPushStream(); } else { remoteUidSet.clear(); - trtcCloud.unRegisterListener(onTrtcListener); + trtcCloud.unRegisterListener(listener); trtcCloud.stopLocalAudio(); trtcCloud.stopLocalPreview(); trtcCloud.exitRoom(); @@ -256,7 +171,6 @@ class _RoomPkPageState extends State { color: Colors.grey, child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -275,11 +189,10 @@ class _RoomPkPageState extends State { ? Text('Waiting for PK anchor') : TRTCCloudVideoView( key: ValueKey("OtherlView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { trtcCloud.startRemoteView( otherUserId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, + TRTCVideoStreamType.small, viewId); }, ), diff --git a/TRTC-API-Example/lib/Advanced/SEIMessage/SendAndReceiveSEIMessagePage.dart b/TRTC-API-Example/lib/Advanced/SEIMessage/SendAndReceiveSEIMessagePage.dart index 666806f..273ae13 100644 --- a/TRTC-API-Example/lib/Advanced/SEIMessage/SendAndReceiveSEIMessagePage.dart +++ b/TRTC-API-Example/lib/Advanced/SEIMessage/SendAndReceiveSEIMessagePage.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:oktoast/oktoast.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Common/TXUpdateEvent.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; @@ -16,7 +16,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; SEI Message Receiving/Sending The TRTC app supports sending and receiving SEI messages. This document shows how to integrate the SEI message sending/receiving feature. - 1. Enter a room: trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE); + 1. Enter a room: trtcCloud.enterRoom(params, TRTCAppScene.live); 2. Send SEI messages: trtcCloud.sendSEIMsg(seiMessage, 1); 3. Receive SEI messages: onTrtcListener:- onRecvSEIMsg(String userId, String message); Documentation: https://trtc.io/document/47866?product=featuresserverapis @@ -32,6 +32,7 @@ class SendAndReceiveSEIMessagePage extends StatefulWidget { class _SendAndReceiveSEIMessagePageState extends State { late TRTCCloud trtcCloud; + late TRTCCloudListener listener; int? localViewId; bool isStartPush = false; int roomId = int.parse(TXHelper.generateRandomStrRoomId()); @@ -50,120 +51,37 @@ class _SendAndReceiveSEIMessagePageState } startPushStream() async { - trtcCloud.startLocalPreview(true, localViewId); + trtcCloud.startLocalPreview(true, localViewId!); TRTCParams params = new TRTCParams(); params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.roomId; params.userId = this.userId; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL); + trtcCloud.enterRoom(params, TRTCAppScene.videoCall); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540; + encParams.videoResolution = TRTCVideoResolution.res_960_540; // In TRTCVIDEORESOLUTION, only the horizontal screen resolution (such as 640 × 360) is defined. If you need to use a vertical screen resolution (such as 360 × 640), you need to specify the TRTCVIDEORESOLUTIONMODE to be Portrait. - encParams.videoResolutionMode = 1; + encParams.videoResolutionMode = TRTCVideoResolutionMode.landscape; encParams.videoFps = 24; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); + listener = getListener(); + trtcCloud.registerListener(listener); } - - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - onRemoteUserLeaveRoom(params["userId"], params['reason']); - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - onRecvSEIMsg(params['userId'], params['message']); - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + + TRTCCloudListener getListener() { + return TRTCCloudListener( + onRemoteUserLeaveRoom: (userId, reason) { + onRemoteUserLeaveRoom(userId, reason); + }, + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + }, + onRecvSEIMsg: (userId, message) { + onRecvSEIMsg(userId, message); + } + ); } onRemoteUserLeaveRoom(String userId, int reason) { @@ -192,10 +110,10 @@ class _SendAndReceiveSEIMessagePageState } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + TRTCCloud.destroySharedInstance(); } @override @@ -210,7 +128,7 @@ class _SendAndReceiveSEIMessagePageState if (isStartPush) { startPushStream(); } else { - trtcCloud.unRegisterListener(onTrtcListener); + trtcCloud.unRegisterListener(listener); trtcCloud.stopLocalAudio(); trtcCloud.stopLocalPreview(); trtcCloud.exitRoom(); @@ -235,7 +153,6 @@ class _SendAndReceiveSEIMessagePageState onTap: () {}, child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -271,11 +188,10 @@ class _SendAndReceiveSEIMessagePageState flex: 1, child: TRTCCloudVideoView( key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { trtcCloud.startRemoteView( userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, + TRTCVideoStreamType.small, viewId); }, ), diff --git a/TRTC-API-Example/lib/Advanced/SetAudioEffect/SetAudioEffectPage.dart b/TRTC-API-Example/lib/Advanced/SetAudioEffect/SetAudioEffectPage.dart index 3f22606..541d220 100644 --- a/TRTC-API-Example/lib/Advanced/SetAudioEffect/SetAudioEffectPage.dart +++ b/TRTC-API-Example/lib/Advanced/SetAudioEffect/SetAudioEffectPage.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; -import 'package:tencent_trtc_cloud/tx_audio_effect_manager.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/tx_audio_effect_manager.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Common/TXUpdateEvent.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; @@ -20,6 +20,7 @@ class SetAudioEffectPage extends StatefulWidget { class _SetAudioEffectPageState extends State { late TRTCCloud trtcCloud; + late TRTCCloudListener listener; late TXAudioEffectManager audioEffectManager; int? localViewId; bool isStartPush = false; @@ -40,119 +41,32 @@ class _SetAudioEffectPageState extends State { } startPushStream() async { - trtcCloud.startLocalPreview(true, localViewId); + trtcCloud.startLocalPreview(true, localViewId!); TRTCParams params = new TRTCParams(); params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.roomId; params.userId = this.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE); + trtcCloud.enterRoom(params, TRTCAppScene.live); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540; + encParams.videoResolution = TRTCVideoResolution.res_960_540; // In TRTCVIDEORESOLUTION, only the horizontal screen resolution (such as 640 × 360) is defined. If you need to use a vertical screen resolution (such as 360 × 640), you need to specify the TRTCVIDEORESOLUTIONMODE to be Portrait. - encParams.videoResolutionMode = 1; + encParams.videoResolutionMode = TRTCVideoResolutionMode.portrait; encParams.videoFps = 24; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); + listener = getListener(); + trtcCloud.registerListener(listener); } - - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + } + ); } onUserVideoAvailable(String userId, bool available) { @@ -169,10 +83,10 @@ class _SetAudioEffectPageState extends State { } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + TRTCCloud.destroySharedInstance(); } @override @@ -189,7 +103,7 @@ class _SetAudioEffectPageState extends State { } else { remoteRenderParamsDic.clear(); remoteUidSet.clear(); - trtcCloud.unRegisterListener(onTrtcListener); + trtcCloud.unRegisterListener(listener); trtcCloud.stopLocalAudio(); trtcCloud.stopLocalPreview(); trtcCloud.exitRoom(); @@ -199,7 +113,7 @@ class _SetAudioEffectPageState extends State { Widget getButtonItem({ required String tile, - required int value, + required dynamic value, required Function onClick, }) { MaterialStateProperty greenColor = @@ -231,27 +145,27 @@ class _SetAudioEffectPageState extends State { return [ getButtonItem( tile: "Native", - value: TXVoiceChangerType.TXLiveVoiceChangerType_0, + value: TXVoiceChangerType.type0, onClick: onVoiceChangerClick, ), getButtonItem( tile: "bad boy", - value: TXVoiceChangerType.TXLiveVoiceChangerType_1, + value: TXVoiceChangerType.type1, onClick: onVoiceChangerClick, ), getButtonItem( tile: "Loli", - value: TXVoiceChangerType.TXLiveVoiceChangerType_2, + value: TXVoiceChangerType.type2, onClick: onVoiceChangerClick, ), getButtonItem( tile: "Heavy metal", - value: TXVoiceChangerType.TXLiveVoiceChangerType_4, + value: TXVoiceChangerType.type4, onClick: onVoiceChangerClick, ), getButtonItem( tile: "Uncle", - value: TXVoiceChangerType.TXLiveVoiceChangerType_3, + value: TXVoiceChangerType.type3, onClick: onVoiceChangerClick, ), ]; @@ -266,27 +180,27 @@ class _SetAudioEffectPageState extends State { return [ getButtonItem( tile: "no effect", - value: TXVoiceReverbType.TXLiveVoiceReverbType_0, + value: TXVoiceReverbType.type0, onClick: onVoiceReverbClick, ), getButtonItem( tile: "KTV", - value: TXVoiceReverbType.TXLiveVoiceReverbType_1, + value: TXVoiceReverbType.type1, onClick: onVoiceReverbClick, ), getButtonItem( tile: "small room", - value: TXVoiceReverbType.TXLiveVoiceReverbType_2, + value: TXVoiceReverbType.type2, onClick: onVoiceReverbClick, ), getButtonItem( tile: "Gorgeous hall", - value: TXVoiceReverbType.TXLiveVoiceReverbType_3, + value: TXVoiceReverbType.type3, onClick: onVoiceReverbClick, ), getButtonItem( tile: "Low", - value: TXVoiceReverbType.TXLiveVoiceReverbType_4, + value: TXVoiceReverbType.type4, onClick: onVoiceReverbClick, ), ]; @@ -305,7 +219,6 @@ class _SetAudioEffectPageState extends State { onTap: () {}, child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -341,11 +254,10 @@ class _SetAudioEffectPageState extends State { flex: 1, child: TRTCCloudVideoView( key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { trtcCloud.startRemoteView( userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, + TRTCVideoStreamType.small, viewId); }, ), diff --git a/TRTC-API-Example/lib/Advanced/SetAudioQuality/SetAudioQualityPage.dart b/TRTC-API-Example/lib/Advanced/SetAudioQuality/SetAudioQualityPage.dart index 7ea8d7d..3501c8e 100644 --- a/TRTC-API-Example/lib/Advanced/SetAudioQuality/SetAudioQualityPage.dart +++ b/TRTC-API-Example/lib/Advanced/SetAudioQuality/SetAudioQualityPage.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Common/TXUpdateEvent.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; @@ -19,12 +19,13 @@ class SetAudioQualityPage extends StatefulWidget { class _SetAudioQualityPageState extends State { late TRTCCloud trtcCloud; + late TRTCCloudListener listener; int? localViewId; bool isStartPush = false; int roomId = int.parse(TXHelper.generateRandomStrRoomId()); String userId = TXHelper.generateRandomUserId(); Map remoteUidSet = {}; - int audioQuality = TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT; + TRTCAudioQuality audioQuality = TRTCAudioQuality.defaultMode; int audioCaptureVolume = 100; @override void initState() { @@ -38,119 +39,32 @@ class _SetAudioQualityPageState extends State { } startPushStream() async { - trtcCloud.startLocalPreview(true, localViewId); + trtcCloud.startLocalPreview(true, localViewId!); TRTCParams params = new TRTCParams(); params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.roomId; params.userId = this.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_AUDIOCALL); + trtcCloud.enterRoom(params, TRTCAppScene.audioCall); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360; + encParams.videoResolution = TRTCVideoResolution.res_640_360; encParams.videoBitrate = 550; encParams.videoFps = 15; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.registerListener(onTrtcListener); + listener = getListener(); + trtcCloud.registerListener(listener); trtcCloud.startLocalAudio(audioQuality); trtcCloud.setAudioCaptureVolume(audioCaptureVolume); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + } + ); } onUserVideoAvailable(String userId, bool available) { @@ -167,10 +81,10 @@ class _SetAudioQualityPageState extends State { } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + TRTCCloud.destroySharedInstance(); } @override @@ -187,7 +101,7 @@ class _SetAudioQualityPageState extends State { } else { remoteUidSet.clear(); trtcCloud.stopLocalAudio(); - trtcCloud.unRegisterListener(onTrtcListener); + trtcCloud.unRegisterListener(listener); trtcCloud.stopLocalPreview(); trtcCloud.exitRoom(); } @@ -196,21 +110,21 @@ class _SetAudioQualityPageState extends State { onSpeechButtonClick() { setState(() { - audioQuality = TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH; + audioQuality = TRTCAudioQuality.speech; trtcCloud.startLocalAudio(audioQuality); }); } onDefaultButtonClick() { setState(() { - audioQuality = TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT; + audioQuality = TRTCAudioQuality.defaultMode; trtcCloud.startLocalAudio(audioQuality); }); } onMusicButtonClick() { setState(() { - audioQuality = TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC; + audioQuality = TRTCAudioQuality.music; trtcCloud.startLocalAudio(audioQuality); }); } @@ -238,7 +152,6 @@ class _SetAudioQualityPageState extends State { onTap: () {}, child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -270,10 +183,9 @@ class _SetAudioQualityPageState extends State { ), child: TRTCCloudVideoView( key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { trtcCloud.startRemoteView(userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, viewId); + TRTCVideoStreamType.small, viewId); }, ), ); @@ -325,7 +237,7 @@ class _SetAudioQualityPageState extends State { EdgeInsets.only(left: 0, right: 0), ), backgroundColor: audioQuality == - TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT + TRTCAudioQuality.defaultMode ? greenColor : greyColor, ), @@ -350,7 +262,7 @@ class _SetAudioQualityPageState extends State { EdgeInsets.only(left: 0, right: 0), ), backgroundColor: audioQuality == - TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH + TRTCAudioQuality.speech ? greenColor : greyColor, ), @@ -375,7 +287,7 @@ class _SetAudioQualityPageState extends State { EdgeInsets.only(left: 0, right: 0), ), backgroundColor: audioQuality == - TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC + TRTCAudioQuality.music ? greenColor : greyColor, ), diff --git a/TRTC-API-Example/lib/Advanced/SetBackgroudMusic/SetBGMPage.dart b/TRTC-API-Example/lib/Advanced/SetBackgroudMusic/SetBGMPage.dart index b229ae8..64fbd47 100644 --- a/TRTC-API-Example/lib/Advanced/SetBackgroudMusic/SetBGMPage.dart +++ b/TRTC-API-Example/lib/Advanced/SetBackgroudMusic/SetBGMPage.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Common/TXUpdateEvent.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; -import 'package:tencent_trtc_cloud/tx_audio_effect_manager.dart'; +import 'package:tencent_rtc_sdk/tx_audio_effect_manager.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; /// SetBGMPage.dart @@ -20,7 +20,9 @@ class SetBGMPage extends StatefulWidget { class _SetBGMPageState extends State { late TRTCCloud trtcCloud; + late TRTCCloudListener listener; late TXAudioEffectManager audioEffectManager; + late TXMusicPlayObserver musicPlayObserver; int? localViewId; bool isStartPush = false; int roomId = int.parse(TXHelper.generateRandomStrRoomId()); @@ -47,122 +49,47 @@ class _SetBGMPageState extends State { } startPushStream() async { - trtcCloud.startLocalPreview(true, localViewId); + trtcCloud.startLocalPreview(true, localViewId!); TRTCParams params = new TRTCParams(); params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.roomId; params.userId = this.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE); + trtcCloud.enterRoom(params, TRTCAppScene.live); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540; + encParams.videoResolution = TRTCVideoResolution.res_960_540; // In TRTCVIDEORESOLUTION, only the horizontal screen resolution (such as 640 × 360) is defined. If you need to use a vertical screen resolution (such as 360 × 640), you need to specify the TRTCVIDEORESOLUTIONMODE to be Portrait. - encParams.videoResolutionMode = 1; + encParams.videoResolutionMode = TRTCVideoResolutionMode.portrait; encParams.videoFps = 24; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); + listener = getListener(); + trtcCloud.registerListener(listener); + musicPlayObserver = getMusicPlayObserver(); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - print('onMusicObserverStart'); - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - print('onMusicObserverPlayProgress'); - break; - case TRTCCloudListener.onMusicObserverComplete: - print('onMusicObserverComplete'); - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + } + ); + } + + TXMusicPlayObserver getMusicPlayObserver() { + return TXMusicPlayObserver( + onStart: (id, errCode) { + debugPrint('onStart id: $id, errCode: $errCode'); + }, + onPlayProgress: (id, curPtsMSm, durationMS) { + debugPrint('onPlayProgress id: $id, curPtsMSm: $curPtsMSm, durationMS: $durationMS'); + }, + onComplete: (id, errCode) { + debugPrint('onComplete id: $id, errCode: $errCode'); + } + ); } onUserVideoAvailable(String userId, bool available) { @@ -179,10 +106,10 @@ class _SetBGMPageState extends State { } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + TRTCCloud.destroySharedInstance(); } @override @@ -261,6 +188,7 @@ class _SetBGMPageState extends State { bgmParam.path = url; bgmParam.publish = true; audioEffectManager.startPlayMusic(bgmParam); + audioEffectManager.setMusicObserver(bgmParam.id, musicPlayObserver); }); } @@ -273,6 +201,7 @@ class _SetBGMPageState extends State { bgmParam.path = url; bgmParam.publish = true; audioEffectManager.startPlayMusic(bgmParam); + audioEffectManager.setMusicObserver(bgmParam.id, musicPlayObserver); }); } @@ -285,6 +214,7 @@ class _SetBGMPageState extends State { bgmParam.path = url; bgmParam.publish = true; audioEffectManager.startPlayMusic(bgmParam); + audioEffectManager.setMusicObserver(bgmParam.id, musicPlayObserver); }); } @@ -296,7 +226,7 @@ class _SetBGMPageState extends State { } else { remoteRenderParamsDic.clear(); remoteUidSet.clear(); - trtcCloud.unRegisterListener(onTrtcListener); + trtcCloud.unRegisterListener(listener); trtcCloud.stopLocalAudio(); trtcCloud.stopLocalPreview(); trtcCloud.exitRoom(); @@ -316,7 +246,6 @@ class _SetBGMPageState extends State { onTap: () {}, child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -352,11 +281,10 @@ class _SetBGMPageState extends State { flex: 1, child: TRTCCloudVideoView( key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { trtcCloud.startRemoteView( userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, + TRTCVideoStreamType.small, viewId); }, ), diff --git a/TRTC-API-Example/lib/Advanced/SetRenderParams/SetRenderParamsPage.dart b/TRTC-API-Example/lib/Advanced/SetRenderParams/SetRenderParamsPage.dart index 7c7e625..f0694f0 100644 --- a/TRTC-API-Example/lib/Advanced/SetRenderParams/SetRenderParamsPage.dart +++ b/TRTC-API-Example/lib/Advanced/SetRenderParams/SetRenderParamsPage.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Common/TXUpdateEvent.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; @@ -19,18 +19,19 @@ class SetRenderParamsPage extends StatefulWidget { class _SetRenderParamsPageState extends State { late TRTCCloud trtcCloud; + late TRTCCloudListener listener; int? localViewId; bool isStartPush = false; int roomId = int.parse(TXHelper.generateRandomStrRoomId()); String userId = TXHelper.generateRandomUserId(); Map remoteUidSet = {}; - int localFillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL; - int localMirroType = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO; - int localRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0; + TRTCVideoFillMode localFillMode = TRTCVideoFillMode.fill; + TRTCVideoMirrorType localMirroType = TRTCVideoMirrorType.auto; + TRTCVideoRotation localRotation = TRTCVideoRotation.rotation0; String selectedRemoteUser = ""; - int selectedRemoteFillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL; - int selectedRemoteRotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0; + TRTCVideoFillMode selectedRemoteFillMode = TRTCVideoFillMode.fill; + TRTCVideoRotation selectedRemoteRotation = TRTCVideoRotation.rotation0; Map remoteRenderParamsDic = {}; @override @@ -42,122 +43,35 @@ class _SetRenderParamsPageState extends State { initTRTCCloud() async { trtcCloud = (await TRTCCloud.sharedInstance())!; - trtcCloud.setGSensorMode(TRTCCloudDef.TRTC_GSENSOR_MODE_DISABLE); + trtcCloud.setGravitySensorAdaptiveMode(TRTCGSensorMode.disable); } startPushStream() async { - trtcCloud.startLocalPreview(true, localViewId); + trtcCloud.startLocalPreview(true, localViewId!); TRTCParams params = new TRTCParams(); params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.roomId; params.userId = this.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL); + trtcCloud.enterRoom(params, TRTCAppScene.videoCall); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360; + encParams.videoResolution = TRTCVideoResolution.res_640_360; encParams.videoBitrate = 550; encParams.videoFps = 15; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); + listener = getListener(); + trtcCloud.registerListener(listener); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + } + ); } onUserVideoAvailable(String userId, bool available) { @@ -184,10 +98,10 @@ class _SetRenderParamsPageState extends State { } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + TRTCCloud.destroySharedInstance(); } @override @@ -205,7 +119,7 @@ class _SetRenderParamsPageState extends State { selectedRemoteUser = ""; remoteRenderParamsDic.clear(); remoteUidSet.clear(); - trtcCloud.unRegisterListener(onTrtcListener); + trtcCloud.unRegisterListener(listener); trtcCloud.stopLocalAudio(); trtcCloud.stopLocalPreview(); trtcCloud.exitRoom(); @@ -226,7 +140,7 @@ class _SetRenderParamsPageState extends State { renderParams = remoteRenderParamsDic[selectedRemoteUser]!; } trtcCloud.setRemoteRenderParams(selectedRemoteUser, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, renderParams); + TRTCVideoStreamType.small, renderParams); } } @@ -297,8 +211,8 @@ class _SetRenderParamsPageState extends State { Widget build(BuildContext context) { List remoteUidList = remoteUidSet.values.toList(); TRTCRenderParams remoteRenderParams = TRTCRenderParams(); - remoteRenderParams.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL; - remoteRenderParams.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0; + remoteRenderParams.fillMode = TRTCVideoFillMode.fill; + remoteRenderParams.rotation = TRTCVideoRotation.rotation0; if (remoteRenderParamsDic.containsKey(selectedRemoteUser)) { remoteRenderParams = remoteRenderParamsDic[selectedRemoteUser]!; } @@ -311,7 +225,6 @@ class _SetRenderParamsPageState extends State { onTap: () {}, child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -347,11 +260,10 @@ class _SetRenderParamsPageState extends State { flex: 1, child: TRTCCloudVideoView( key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { trtcCloud.startRemoteView( userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, + TRTCVideoStreamType.small, viewId); }, ), @@ -416,7 +328,7 @@ class _SetRenderParamsPageState extends State { items: [ DropdownMenuItem( value: - TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL, + TRTCVideoFillMode.fill, child: Container( child: Text('filling'), width: 125, @@ -424,7 +336,7 @@ class _SetRenderParamsPageState extends State { ), DropdownMenuItem( value: - TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT, + TRTCVideoFillMode.fit, child: Container( width: 125, child: Text('adapt'), @@ -452,23 +364,21 @@ class _SetRenderParamsPageState extends State { items: [ DropdownMenuItem( value: - TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO, + TRTCVideoMirrorType.auto, child: Container( width: 125, child: Text('Kaishi'), ), ), DropdownMenuItem( - value: TRTCCloudDef - .TRTC_VIDEO_MIRROR_TYPE_ENABLE, + value: TRTCVideoMirrorType.enable, child: Container( width: 125, child: Text('Turn on the front and rear'), ), ), DropdownMenuItem( - value: TRTCCloudDef - .TRTC_VIDEO_MIRROR_TYPE_DISABLE, + value: TRTCVideoMirrorType.disable, child: Container( width: 125, child: Text('Turn on the front and rear camera'), @@ -495,14 +405,14 @@ class _SetRenderParamsPageState extends State { }, items: [ DropdownMenuItem( - value: TRTCCloudDef.TRTC_VIDEO_ROTATION_0, + value: TRTCVideoRotation.rotation0, child: Container( width: 125, child: Text('0 degrees'), ), ), DropdownMenuItem( - value: TRTCCloudDef.TRTC_VIDEO_ROTATION_90, + value: TRTCVideoRotation.rotation90, child: Container( width: 125, child: Text( @@ -511,14 +421,14 @@ class _SetRenderParamsPageState extends State { ), ), DropdownMenuItem( - value: TRTCCloudDef.TRTC_VIDEO_ROTATION_180, + value: TRTCVideoRotation.rotation180, child: Container( width: 125, child: Text('180 degrees'), ), ), DropdownMenuItem( - value: TRTCCloudDef.TRTC_VIDEO_ROTATION_270, + value: TRTCVideoRotation.rotation270, child: Container( width: 125, child: Text('270 degrees'), @@ -585,7 +495,7 @@ class _SetRenderParamsPageState extends State { items: [ DropdownMenuItem( value: - TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL, + TRTCVideoFillMode.fill, child: Container( child: Text('filling'), width: 125, @@ -593,7 +503,7 @@ class _SetRenderParamsPageState extends State { ), DropdownMenuItem( value: - TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT, + TRTCVideoFillMode.fit, child: Container( width: 125, child: Text('adapt'), @@ -620,14 +530,14 @@ class _SetRenderParamsPageState extends State { }, items: [ DropdownMenuItem( - value: TRTCCloudDef.TRTC_VIDEO_ROTATION_0, + value: TRTCVideoRotation.rotation0, child: Container( width: 125, child: Text('0 degrees'), ), ), DropdownMenuItem( - value: TRTCCloudDef.TRTC_VIDEO_ROTATION_90, + value: TRTCVideoRotation.rotation90, child: Container( width: 125, child: Text( @@ -636,14 +546,14 @@ class _SetRenderParamsPageState extends State { ), ), DropdownMenuItem( - value: TRTCCloudDef.TRTC_VIDEO_ROTATION_180, + value: TRTCVideoRotation.rotation180, child: Container( width: 125, child: Text('180 degrees'), ), ), DropdownMenuItem( - value: TRTCCloudDef.TRTC_VIDEO_ROTATION_270, + value: TRTCVideoRotation.rotation270, child: Container( width: 125, child: Text('270 degrees'), diff --git a/TRTC-API-Example/lib/Advanced/SetVideoQuality/SetVideoQualityPage.dart b/TRTC-API-Example/lib/Advanced/SetVideoQuality/SetVideoQualityPage.dart index 045978f..ab1be87 100644 --- a/TRTC-API-Example/lib/Advanced/SetVideoQuality/SetVideoQualityPage.dart +++ b/TRTC-API-Example/lib/Advanced/SetVideoQuality/SetVideoQualityPage.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Common/TXUpdateEvent.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; @@ -26,20 +26,21 @@ class SetVideoQualityPage extends StatefulWidget { class _SetVideoQualityPageState extends State { late TRTCCloud trtcCloud; + late TRTCCloudListener listener; int? localViewId; bool isStartPush = false; int roomId = int.parse(TXHelper.generateRandomStrRoomId()); String userId = TXHelper.generateRandomUserId(); Map remoteUidSet = {}; - Map bitrateDic = { - TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360: BitrateRange(200, 1000, 800), - TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540: BitrateRange(400, 1600, 900), - TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1280_720: BitrateRange(500, 2000, 1250), - TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1920_1080: BitrateRange(800, 3000, 1900), + Map bitrateDic = { + TRTCVideoResolution.res_640_360: BitrateRange(200, 1000, 800), + TRTCVideoResolution.res_960_540: BitrateRange(400, 1600, 900), + TRTCVideoResolution.res_1280_720: BitrateRange(500, 2000, 1250), + TRTCVideoResolution.res_1920_1080: BitrateRange(800, 3000, 1900), }; int videoFps = 15; int videoBitrate = 900; - int videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540; + TRTCVideoResolution videoResolution = TRTCVideoResolution.res_960_540; @override void initState() { initTRTCCloud(); @@ -52,117 +53,30 @@ class _SetVideoQualityPageState extends State { } startPushStream() async { - trtcCloud.startLocalPreview(true, localViewId); + trtcCloud.startLocalPreview(true, localViewId!); TRTCParams params = new TRTCParams(); params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.roomId; params.userId = this.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL); + trtcCloud.enterRoom(params, TRTCAppScene.videoCall); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); encParams.videoResolution = videoResolution; encParams.videoBitrate = videoBitrate; encParams.videoFps = videoFps; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.registerListener(onTrtcListener); + listener = getListener(); + trtcCloud.registerListener(listener); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + } + ); } onUserVideoAvailable(String userId, bool available) { @@ -179,10 +93,10 @@ class _SetVideoQualityPageState extends State { } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + TRTCCloud.destroySharedInstance(); } @override @@ -192,32 +106,32 @@ class _SetVideoQualityPageState extends State { } onVideo360PClick() { - videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360; + videoResolution = TRTCVideoResolution.res_640_360; refreshBitrateSlider(); refreshEncParam(); } onVideo540PClick() { - videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540; + videoResolution = TRTCVideoResolution.res_960_540; refreshBitrateSlider(); refreshEncParam(); } onVideo720PClick() { - videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1280_720; + videoResolution = TRTCVideoResolution.res_1280_720; refreshBitrateSlider(); refreshEncParam(); } onVideo1080PClick() { - videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1920_1080; + videoResolution = TRTCVideoResolution.res_1920_1080; refreshBitrateSlider(); refreshEncParam(); } refreshBitrateSlider() { BitrateRange currentBitrate = - bitrateDic[TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540]!; + bitrateDic[TRTCVideoResolution.res_960_540]!; if (bitrateDic.containsKey(videoResolution)) { currentBitrate = bitrateDic[videoResolution]!; } @@ -240,7 +154,7 @@ class _SetVideoQualityPageState extends State { startPushStream(); } else { remoteUidSet.clear(); - trtcCloud.unRegisterListener(onTrtcListener); + trtcCloud.unRegisterListener(listener); trtcCloud.stopLocalPreview(); trtcCloud.exitRoom(); } @@ -267,7 +181,7 @@ class _SetVideoQualityPageState extends State { MaterialStateProperty greyColor = MaterialStateProperty.all(Colors.grey); BitrateRange currentBitrate = - bitrateDic[TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540]!; + bitrateDic[TRTCVideoResolution.res_960_540]!; if (bitrateDic.containsKey(videoResolution)) { currentBitrate = bitrateDic[videoResolution]!; } @@ -280,7 +194,6 @@ class _SetVideoQualityPageState extends State { onTap: () {}, child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -312,10 +225,9 @@ class _SetVideoQualityPageState extends State { ), child: TRTCCloudVideoView( key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { trtcCloud.startRemoteView(userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, viewId); + TRTCVideoStreamType.small, viewId); }, ), ); @@ -359,7 +271,7 @@ class _SetVideoQualityPageState extends State { EdgeInsets.only(left: 0, right: 0), ), backgroundColor: videoResolution == - TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360 + TRTCVideoResolution.res_640_360 ? greenColor : greyColor, ), @@ -384,7 +296,7 @@ class _SetVideoQualityPageState extends State { EdgeInsets.only(left: 0, right: 0), ), backgroundColor: videoResolution == - TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540 + TRTCVideoResolution.res_960_540 ? greenColor : greyColor, ), @@ -409,7 +321,7 @@ class _SetVideoQualityPageState extends State { EdgeInsets.only(left: 0, right: 0), ), backgroundColor: videoResolution == - TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1280_720 + TRTCVideoResolution.res_1280_720 ? greenColor : greyColor, ), @@ -434,7 +346,7 @@ class _SetVideoQualityPageState extends State { EdgeInsets.only(left: 0, right: 0), ), backgroundColor: videoResolution == - TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1920_1080 + TRTCVideoResolution.res_1920_1080 ? greenColor : greyColor, ), diff --git a/TRTC-API-Example/lib/Advanced/SpeedTest/SpeedTestPage.dart b/TRTC-API-Example/lib/Advanced/SpeedTest/SpeedTestPage.dart index b5f952c..8622fc8 100644 --- a/TRTC-API-Example/lib/Advanced/SpeedTest/SpeedTestPage.dart +++ b/TRTC-API-Example/lib/Advanced/SpeedTest/SpeedTestPage.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -17,6 +18,7 @@ class SpeedTestPage extends StatefulWidget { class _SpeedTestPageState extends State { String userId = TXHelper.generateRandomUserId(); late TRTCCloud trtcCloud; + late TRTCCloudListener listener; String btnTitle = "Speed test start"; List printResultList = []; @override @@ -30,9 +32,10 @@ class _SpeedTestPageState extends State { } destroyRoom() async { - trtcCloud.unRegisterListener(onTrtcListener); - await trtcCloud.stopSpeedTest(); - await TRTCCloud.destroySharedInstance(); + listener = getListener(); + trtcCloud.unRegisterListener(listener); + trtcCloud.stopSpeedTest(); + TRTCCloud.destroySharedInstance(); } @override @@ -48,100 +51,14 @@ class _SpeedTestPageState extends State { } } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - onSpeedTest(params); - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onSpeedTestResult: (result) { + debugPrint("TRTCCloudExample TRTCCloudListenerparseCallbackParam onSpeedTestResult TRTCSpeedTestResult: success:${result.success} errMsg:${result.errMsg} ip:${result.ip} \n" + " onSpeedTestResult quality:${result.quality} upLostRate:${result.upLostRate} downLostRate:${result.downLostRate} rtt:${result.rtt} \n" + " onSpeedTestResult availableUpBandwidth:${result.availableUpBandwidth} availableDownBandwidth:${result.availableDownBandwidth} upJitter:${result.upJitter} downJitter:${result.downJitter}\n"); + } + ); } onSpeedTest(params) { @@ -176,8 +93,16 @@ class _SpeedTestPageState extends State { btnTitle = "0%"; int sdkAppId = GenerateTestUserSig.sdkAppId; String userSig = await GenerateTestUserSig.genTestSig(userId); - trtcCloud.startSpeedTest(sdkAppId, userId, userSig); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startSpeedTest(TRTCSpeedTestParams( + sdkAppId: GenerateTestUserSig.sdkAppId, + userId: "5555", + userSig: GenerateTestUserSig.genTestSig("5555"), + scene: TRTCSpeedTestScene.delayAndBandwidthTesting, + expectedDownBandwidth: 500, + expectedUpBandwidth: 500, + )); + listener = getListener(); + trtcCloud.registerListener(listener); } onStartButtonClick() { @@ -186,7 +111,7 @@ class _SpeedTestPageState extends State { beginSpeedTest(); } else if (btnTitle == "Speed test finished") { btnTitle = "Speed test start"; - trtcCloud.unRegisterListener(onTrtcListener); + trtcCloud.unRegisterListener(listener); } setState(() {}); } diff --git a/TRTC-API-Example/lib/Advanced/StringRoomId/StringRoomIdPage.dart b/TRTC-API-Example/lib/Advanced/StringRoomId/StringRoomIdPage.dart index ed0d28e..be6ea49 100644 --- a/TRTC-API-Example/lib/Advanced/StringRoomId/StringRoomIdPage.dart +++ b/TRTC-API-Example/lib/Advanced/StringRoomId/StringRoomIdPage.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Common/TXUpdateEvent.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; @@ -34,10 +34,10 @@ class _StringRoomIdPageState extends State { } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + TRTCCloud.destroySharedInstance(); } @override @@ -48,28 +48,28 @@ class _StringRoomIdPageState extends State { } startPushStream() async { - trtcCloud.startLocalPreview(true, localViewId); + trtcCloud.startLocalPreview(true, localViewId!); TRTCParams params = new TRTCParams(); params.sdkAppId = GenerateTestUserSig.sdkAppId; params.strRoomId = this.strRoomId; params.userId = this.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE); + trtcCloud.enterRoom(params, TRTCAppScene.live); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540; - encParams.videoResolutionMode = 1; + encParams.videoResolution = TRTCVideoResolution.res_960_540; + encParams.videoResolutionMode = TRTCVideoResolutionMode.portrait; encParams.videoFps = 24; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); } stopPushStream() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); } final roomIdFocusNode = FocusNode(); @@ -96,7 +96,6 @@ class _StringRoomIdPageState extends State { }, child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; diff --git a/TRTC-API-Example/lib/Advanced/SwitchRoom/SwitchRoomPage.dart b/TRTC-API-Example/lib/Advanced/SwitchRoom/SwitchRoomPage.dart index 82da712..0edf858 100644 --- a/TRTC-API-Example/lib/Advanced/SwitchRoom/SwitchRoomPage.dart +++ b/TRTC-API-Example/lib/Advanced/SwitchRoom/SwitchRoomPage.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Common/TXHelper.dart'; import 'package:trtc_api_example/Common/TXUpdateEvent.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; @@ -19,6 +19,7 @@ class SwitchRoomPage extends StatefulWidget { class _SwitchRoomPageState extends State { late TRTCCloud trtcCloud; + late TRTCCloudListener listener; int? localViewId; bool isStartPush = false; int roomId = int.parse(TXHelper.generateRandomStrRoomId()); @@ -37,118 +38,33 @@ class _SwitchRoomPageState extends State { } startPushStream() async { - trtcCloud.startLocalPreview(true, localViewId); + trtcCloud.startLocalPreview(true, localViewId!); TRTCParams params = new TRTCParams(); params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.roomId; params.userId = this.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE); + trtcCloud.enterRoom(params, TRTCAppScene.live); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540; + encParams.videoResolution = TRTCVideoResolution.res_960_540; // In TRTCVIDEORESOLUTION, only the horizontal screen resolution (such as 640 × 360) is defined. If you need to use a vertical screen resolution (such as 360 × 640), you need to specify the TRTCVIDEORESOLUTIONMODE to be Portrait. - encParams.videoResolutionMode = 1; + encParams.videoResolutionMode = TRTCVideoResolutionMode.portrait; encParams.videoFps = 24; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); + listener = getListener(); + trtcCloud.registerListener(listener); lastEnterRoomId = this.roomId; } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + } + ); } onUserVideoAvailable(String userId, bool available) { @@ -165,10 +81,10 @@ class _SwitchRoomPageState extends State { } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + TRTCCloud.destroySharedInstance(); } @override @@ -184,7 +100,7 @@ class _SwitchRoomPageState extends State { startPushStream(); } else { remoteUidSet.clear(); - trtcCloud.unRegisterListener(onTrtcListener); + trtcCloud.unRegisterListener(listener); trtcCloud.stopLocalAudio(); trtcCloud.stopLocalPreview(); trtcCloud.exitRoom(); @@ -219,7 +135,6 @@ class _SwitchRoomPageState extends State { onTap: () {}, child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -255,11 +170,10 @@ class _SwitchRoomPageState extends State { flex: 1, child: TRTCCloudVideoView( key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { trtcCloud.startRemoteView( userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, + TRTCVideoStreamType.small, viewId); }, ), diff --git a/TRTC-API-Example/lib/Advanced/TextureRendering/TextureEnterPage.dart b/TRTC-API-Example/lib/Advanced/TextureRendering/TextureEnterPage.dart deleted file mode 100644 index 66c99ef..0000000 --- a/TRTC-API-Example/lib/Advanced/TextureRendering/TextureEnterPage.dart +++ /dev/null @@ -1,154 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:trtc_api_example/Common/ExamplePageLayout.dart'; -import 'package:trtc_api_example/Common/ExampleData.dart'; -import 'package:trtc_api_example/Common/TXHelper.dart'; -import 'VideoCallingPage.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; - -/// TextureEnterPage.dart -/// TRTC-API-Example-Dart -class TextureEnterPage extends StatefulWidget { - const TextureEnterPage({Key? key}) : super(key: key); - - @override - _TextureEnterPageState createState() => _TextureEnterPageState(); -} - -class _TextureEnterPageState extends State { - String roomId = "1356732"; - String userId = TXHelper.generateRandomUserId(); - goVideoCallingPage() { - ExamplePageItem item = ExamplePageItem( - title: 'Room ID: $roomId', - detailPage: VideoCallingPage(roomId: int.parse(roomId), userId: userId), - ); - Navigator.push( - context, - new MaterialPageRoute( - builder: (context) => ExamplePageLayout( - examplePageData: item, - ), - ), - ); - } - - @override - void initState() { - super.initState(); - } - - @override - dispose() { - unFocus(); - super.dispose(); - } - - unFocus() { - if (roomIdFocusNode.hasFocus) { - roomIdFocusNode.unfocus(); - } else if (userIdFocusNode.hasFocus) { - userIdFocusNode.unfocus(); - } - } - - final roomIdFocusNode = FocusNode(); - final userIdFocusNode = FocusNode(); - - @override - Widget build(BuildContext context) { - return GestureDetector( - behavior: HitTestBehavior.translucent, - onTap: () { - unFocus(); - }, - child: Column( - children: [ - Expanded( - flex: 1, - child: Padding( - padding: EdgeInsets.only(top: 30, left: 45, right: 45), - child: Column( - children: [ - TextField( - style: TextStyle(color: Colors.white), - autofocus: false, - controller: TextEditingController.fromValue( - TextEditingValue( - text: this.roomId.toString(), - selection: TextSelection.fromPosition( - TextPosition( - affinity: TextAffinity.downstream, - offset: '${this.roomId}'.length), - ), - ), - ), - focusNode: roomIdFocusNode, - decoration: InputDecoration( - labelText: AppLocalizations.of(context)!.please_input_roomid_required, - hintText: AppLocalizations.of(context)!.please_input_roomid, - labelStyle: TextStyle(color: Colors.white), - hintStyle: - TextStyle(color: Color.fromRGBO(255, 255, 255, 0.5)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white), - ), - ), - keyboardType: TextInputType.number, - onChanged: (value) { - roomId = value; - }, - ), - SizedBox(height: 25), - TextField( - style: TextStyle(color: Colors.white), - autofocus: false, - controller: TextEditingController.fromValue( - TextEditingValue( - text: this.userId, - selection: TextSelection.fromPosition( - TextPosition( - affinity: TextAffinity.downstream, - offset: '${this.userId}'.length), - ), - ), - ), - focusNode: userIdFocusNode, - decoration: InputDecoration( - labelText: AppLocalizations.of(context)!.please_input_userid_required, - hintText: AppLocalizations.of(context)!.please_input_userid, - labelStyle: TextStyle(color: Colors.white), - hintStyle: - TextStyle(color: Color.fromRGBO(255, 255, 255, 0.5)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white), - ), - ), - keyboardType: TextInputType.text, - onChanged: (value) { - this.userId = value; - }, - ), - ], - ), - ), - ), - Expanded( - flex: 0, - child: Padding( - padding: EdgeInsets.only(bottom: 35), - child: ElevatedButton( - style: ButtonStyle( - backgroundColor: MaterialStateProperty.all(Colors.green), - ), - onPressed: () { - this.goVideoCallingPage(); - }, - child: Text(AppLocalizations.of(context)!.enter_room), - ), - ), - ), - ], - ), - ); - } -} diff --git a/TRTC-API-Example/lib/Advanced/TextureRendering/VideoCallingPage.dart b/TRTC-API-Example/lib/Advanced/TextureRendering/VideoCallingPage.dart deleted file mode 100644 index 43c24a2..0000000 --- a/TRTC-API-Example/lib/Advanced/TextureRendering/VideoCallingPage.dart +++ /dev/null @@ -1,363 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; -import 'package:tencent_trtc_cloud/tx_device_manager.dart'; -import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; - -/// VideoCallingPage.dart -/// TRTC-API-Example-Dart -class VideoCallingPage extends StatefulWidget { - final int roomId; - final String userId; - const VideoCallingPage({Key? key, required this.roomId, required this.userId}) - : super(key: key); - - @override - _VideoCallingPageState createState() => _VideoCallingPageState(); -} - -class _VideoCallingPageState extends State { - Map remoteUidSet = {}; - bool isFrontCamera = true; - bool isOpenCamera = true; - int? localViewId; - - bool isMuteLocalAudio = false; - bool isSpeaker = true; - late TRTCCloud trtcCloud; - @override - void initState() { - startPushStream(); - super.initState(); - } - - startPushStream() async { - trtcCloud = (await TRTCCloud.sharedInstance())!; - TRTCParams params = new TRTCParams(); - params.sdkAppId = GenerateTestUserSig.sdkAppId; - params.roomId = this.widget.roomId; - params.userId = this.widget.userId; - params.userSig = await GenerateTestUserSig.genTestSig(params.userId); - trtcCloud.callExperimentalAPI( - "{\"api\": \"setFramework\", \"params\": {\"framework\": 7, \"component\": 2}}"); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL); - TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360; - encParams.videoBitrate = 550; - encParams.videoFps = 15; - trtcCloud.setVideoEncoderParam(encParams); - - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); - trtcCloud.registerListener(onTrtcListener); - } - - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - onRemoteUserLeaveRoom(params["userId"], params['reason']); - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } - } - - onRemoteUserLeaveRoom(String userId, int reason) { - setState(() { - if (remoteUidSet.containsKey(userId)) { - remoteUidSet.remove(userId); - } - }); - } - - onUserVideoAvailable(String userId, bool available) { - if (available) { - setState(() { - remoteUidSet[userId] = userId; - }); - } - if (!available && remoteUidSet.containsKey(userId)) { - setState(() { - remoteUidSet.remove(userId); - }); - } - } - - destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - trtcCloud.unRegisterListener(onTrtcListener); - await TRTCCloud.destroySharedInstance(); - } - - @override - dispose() { - destroyRoom(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - List remoteUidList = remoteUidSet.values.toList(); - Size size = MediaQuery.of(context).size; - return Stack( - alignment: Alignment.topLeft, - fit: StackFit.expand, - children: [ - Container( - child: TRTCCloudVideoView( - key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_Texture, - textureParam: CustomRender( - userId: this.widget.userId, - isLocal: true, - streamType: TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, - width: size.width.round(), - height: size.height.round(), - ), - onViewCreated: (viewId) async { - setState(() { - localViewId = viewId; - }); - trtcCloud.startLocalPreview(isFrontCamera, viewId); - }, - ), - ), - Positioned( - right: 15, - top: 15, - width: 72, - height: 370, - child: Container( - child: GridView.builder( - itemCount: remoteUidList.length, - shrinkWrap: true, - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 1, - childAspectRatio: 0.6, - ), - itemBuilder: (BuildContext context, int index) { - String userId = remoteUidList[index]; - return ConstrainedBox( - constraints: BoxConstraints( - maxWidth: 72, - minWidth: 72, - maxHeight: 120, - minHeight: 120, - ), - child: TRTCCloudVideoView( - key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_Texture, - textureParam: CustomRender( - userId: userId, - isLocal: false, - streamType: TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, - width: 72, - height: 120, - ), - onViewCreated: (viewId) async { - trtcCloud.startRemoteView(userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, viewId); - }, - ), - ); - }, - ), - ), - ), - Positioned( - left: 30, - height: 80, - bottom: 120, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Text( - AppLocalizations.of(context)!.videocall_video_item, - style: TextStyle( - color: Colors.red, fontWeight: FontWeight.bold), - ), - ], - ), - Row( - children: [ - ElevatedButton( - style: ButtonStyle( - backgroundColor: MaterialStateProperty.all(Colors.green), - ), - onPressed: () { - bool newIsFrontCamera = !isFrontCamera; - TXDeviceManager deviceManager = - trtcCloud.getDeviceManager(); - deviceManager.switchCamera(newIsFrontCamera); - setState(() { - isFrontCamera = newIsFrontCamera; - }); - }, - child: Text(isFrontCamera ? AppLocalizations.of(context)!.videocall_user_back_camera : AppLocalizations.of(context)!.videocall_user_front_camera), - ), - SizedBox( - width: 30, - ), - ], - ), - ], - ), - ), - Positioned( - left: 30, - height: 80, - width: 500, - bottom: 35, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Text( - AppLocalizations.of(context)!.videocall_audio_item, - style: TextStyle( - color: Colors.red, fontWeight: FontWeight.bold), - ), - ], - ), - Row( - children: [ - ElevatedButton( - style: ButtonStyle( - backgroundColor: MaterialStateProperty.all(Colors.green), - ), - onPressed: () { - bool newIsMuteLocalAudio = !isMuteLocalAudio; - trtcCloud.muteLocalAudio(newIsMuteLocalAudio); - setState(() { - isMuteLocalAudio = newIsMuteLocalAudio; - }); - }, - child: Text(isMuteLocalAudio ? AppLocalizations.of(context)!.open_audio : AppLocalizations.of(context)!.close_audio), - ), - SizedBox( - width: 30, - ), - ElevatedButton( - style: ButtonStyle( - backgroundColor: MaterialStateProperty.all(Colors.green), - ), - onPressed: () { - TXDeviceManager deviceManager = - trtcCloud.getDeviceManager(); - bool newIsSpeaker = !isSpeaker; - if (newIsSpeaker) { - deviceManager.setAudioRoute( - TRTCCloudDef.TRTC_AUDIO_ROUTE_SPEAKER); - } else { - deviceManager.setAudioRoute( - TRTCCloudDef.TRTC_AUDIO_ROUTE_EARPIECE); - } - setState(() { - isSpeaker = newIsSpeaker; - }); - }, - child: Text(isSpeaker ? AppLocalizations.of(context)!.use_speaker : AppLocalizations.of(context)!.use_receiver), - ), - ], - ), - ], - ), - ), - ], - ); - } -} diff --git a/TRTC-API-Example/lib/Basic/AudioCall/AudioCallingPage.dart b/TRTC-API-Example/lib/Basic/AudioCall/AudioCallingPage.dart index 0a1bb76..64252f2 100644 --- a/TRTC-API-Example/lib/Basic/AudioCall/AudioCallingPage.dart +++ b/TRTC-API-Example/lib/Basic/AudioCall/AudioCallingPage.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/tx_device_manager.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/tx_device_manager.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -31,6 +31,7 @@ class _AudioCallingPageState extends State { bool isSpeaker = true; bool isMuteLocalAudio = false; late TRTCCloud trtcCloud; + late TRTCCloudListener listener; @override void initState() { @@ -44,87 +45,41 @@ class _AudioCallingPageState extends State { params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.widget.roomId; params.userId = this.widget.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); trtcCloud.callExperimentalAPI( "{\"api\": \"setFramework\", \"params\": {\"framework\": 7, \"component\": 2}}"); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_AUDIOCALL); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH); - trtcCloud.enableAudioVolumeEvaluation(1000); - - trtcCloud.registerListener(onTrtcListener); + trtcCloud.enterRoom(params, TRTCAppScene.audioCall); + trtcCloud.startLocalAudio(TRTCAudioQuality.speech); + TRTCAudioVolumeEvaluateParams evaluateParams = TRTCAudioVolumeEvaluateParams( + enableVadDetection: true, + enableSpectrumCalculation: true, + interval: 1000, + ); + trtcCloud.enableAudioVolumeEvaluation(true, evaluateParams); + listener = getListener(); + trtcCloud.registerListener(listener); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - onRemoteUserEnterRoom(params); - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - onRemoteUserLeaveRoom(params["userId"], params['reason']); - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - onNetworkQuality(params); - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - onUserVoiceVolume(params); - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onRemoteUserEnterRoom: (userId) { + onRemoteUserEnterRoom(userId); + }, + onRemoteUserLeaveRoom: (userId, reason) { + onRemoteUserLeaveRoom(userId, reason); + }, + onUserVoiceVolume: (list, totalVolume) { + onUserVoiceVolume(list); + } + ); } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.exitRoom(); - trtcCloud.unRegisterListener(onTrtcListener); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.exitRoom(); + trtcCloud.unRegisterListener(listener); + TRTCCloud.destroySharedInstance(); } @override @@ -171,15 +126,14 @@ class _AudioCallingPageState extends State { } // Note that the simulator of this function in iOS is invalid - onUserVoiceVolume(params) { - List list = params["userVolumes"] as List; + onUserVoiceVolume(List list) { list.forEach((item) { - int volme = int.tryParse(item["volume"].toString())!; - if (item['userId'] != null && item['userId'] != "") { - String userId = item['userId']; + int volume = item.volume; + if (item.userId != "") { + String userId = item.userId; if (remoteInfoDictionary.containsKey(userId)) { setState(() { - remoteInfoDictionary[userId]!.volume = volme; + remoteInfoDictionary[userId]!.volume = volume; }); } } @@ -333,10 +287,10 @@ class _AudioCallingPageState extends State { bool newIsSpeaker = !isSpeaker; if (newIsSpeaker) { deviceManager - .setAudioRoute(TRTCCloudDef.TRTC_AUDIO_ROUTE_SPEAKER); + .setAudioRoute(TXAudioRoute.speakerPhone); } else { deviceManager - .setAudioRoute(TRTCCloudDef.TRTC_AUDIO_ROUTE_EARPIECE); + .setAudioRoute(TXAudioRoute.earpiece); } setState(() { isSpeaker = newIsSpeaker; diff --git a/TRTC-API-Example/lib/Basic/Live/LiveAnchorPage.dart b/TRTC-API-Example/lib/Basic/Live/LiveAnchorPage.dart index 36bfab3..76ed445 100644 --- a/TRTC-API-Example/lib/Basic/Live/LiveAnchorPage.dart +++ b/TRTC-API-Example/lib/Basic/Live/LiveAnchorPage.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; -import 'package:tencent_trtc_cloud/tx_device_manager.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/tx_device_manager.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -26,6 +26,7 @@ class _LiveAnchorPageState extends State { bool isMuteLocalAudio = false; late TRTCCloud trtcCloud; + late TRTCCloudListener listener; @override void initState() { @@ -39,124 +40,34 @@ class _LiveAnchorPageState extends State { params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.widget.roomId; params.userId = this.widget.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); trtcCloud.callExperimentalAPI( "{\"api\": \"setFramework\", \"params\": {\"framework\": 7, \"component\": 2}}"); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE); + trtcCloud.enterRoom(params, TRTCAppScene.live); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540; + encParams.videoResolution = TRTCVideoResolution.res_960_540; encParams.videoFps = 24; // In TRTCVIDEORESOLUTION, only the horizontal screen resolution (such as 640 × 360) is defined. If you need to use a vertical screen resolution (such as 360 × 640), you need to specify the TRTCVIDEORESOLUTIONMODE to be Portrait. - encParams.videoResolutionMode = 1; + encParams.videoResolutionMode = TRTCVideoResolutionMode.portrait; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); + listener = getListener(); + trtcCloud.registerListener(listener); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener(); } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - trtcCloud.unRegisterListener(onTrtcListener); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + trtcCloud.unRegisterListener(listener); + TRTCCloud.destroySharedInstance(); } @override @@ -174,7 +85,6 @@ class _LiveAnchorPageState extends State { Container( child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -226,7 +136,7 @@ class _LiveAnchorPageState extends State { onPressed: () { bool newIsOpenCamera = !isOpenCamera; if (newIsOpenCamera) { - trtcCloud.startLocalPreview(isFrontCamera, localViewId); + trtcCloud.startLocalPreview(isFrontCamera, localViewId!); } else { trtcCloud.stopLocalPreview(); } diff --git a/TRTC-API-Example/lib/Basic/Live/LiveAudiencePage.dart b/TRTC-API-Example/lib/Basic/Live/LiveAudiencePage.dart index d0c9231..de2747f 100644 --- a/TRTC-API-Example/lib/Basic/Live/LiveAudiencePage.dart +++ b/TRTC-API-Example/lib/Basic/Live/LiveAudiencePage.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -23,6 +23,7 @@ class _LiveAudiencePageState extends State { Map anchorUserIdSet = {}; int? remoteViewId; late TRTCCloud trtcCloud; + late TRTCCloudListener listener; @override void initState() { startPushStream(); @@ -35,118 +36,33 @@ class _LiveAudiencePageState extends State { params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.widget.roomId; params.userId = this.widget.userId; - params.role = TRTCCloudDef.TRTCRoleAudience; + params.role = TRTCRoleType.audience; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); trtcCloud.callExperimentalAPI( "{\"api\": \"setFramework\", \"params\": {\"framework\": 7, \"component\": 2}}"); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.enterRoom(params, TRTCAppScene.live); + listener = getListener(); + trtcCloud.registerListener(listener); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - onUserAudioAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + }, + onUserAudioAvailable: (userId, available) { + onUserAudioAvailable(userId, available); + } + ); } onUserVideoAvailable(String userId, bool available) { if (available && remoteViewId != null) { trtcCloud.startRemoteView( - userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, remoteViewId); + userId, TRTCVideoStreamType.big, remoteViewId!); } if (!available) { - trtcCloud.stopRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG); + trtcCloud.stopRemoteView(userId, TRTCVideoStreamType.big); } } @@ -159,10 +75,10 @@ class _LiveAudiencePageState extends State { } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.exitRoom(); - trtcCloud.unRegisterListener(onTrtcListener); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.exitRoom(); + trtcCloud.unRegisterListener(listener); + TRTCCloud.destroySharedInstance(); } @override @@ -180,7 +96,6 @@ class _LiveAudiencePageState extends State { Container( child: TRTCCloudVideoView( key: ValueKey("remoteViewId"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { remoteViewId = viewId; diff --git a/TRTC-API-Example/lib/Basic/ScreenShare/ScreenAnchorPage.dart b/TRTC-API-Example/lib/Basic/ScreenShare/ScreenAnchorPage.dart index fcdbce7..35f8368 100644 --- a/TRTC-API-Example/lib/Basic/ScreenShare/ScreenAnchorPage.dart +++ b/TRTC-API-Example/lib/Basic/ScreenShare/ScreenAnchorPage.dart @@ -2,9 +2,9 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; import 'package:replay_kit_launcher/replay_kit_launcher.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -35,6 +35,7 @@ class _ScreenAnchorPageState extends State { Map anchorUserIdSet = {}; int? remoteViewId; late TRTCCloud trtcCloud; + late TRTCCloudListener listener; TRTCVideoEncParam encParams = TRTCVideoEncParam(); @override void initState() { @@ -48,123 +49,44 @@ class _ScreenAnchorPageState extends State { params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.widget.roomId; params.userId = this.widget.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); trtcCloud.callExperimentalAPI( "{\"api\": \"setFramework\", \"params\": {\"framework\": 7, \"component\": 2}}"); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL); + trtcCloud.enterRoom(params, TRTCAppScene.videoCall); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); + listener = getListener(); + trtcCloud.registerListener(listener); } - - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: + + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + }, + onScreenCaptureStarted: () { onScreenCaptureStarted(); - break; - case TRTCCloudListener.onScreenCapturePaused: + }, + onScreenCapturePaused: (reason) { onScreenCapturePaused(); - break; - case TRTCCloudListener.onScreenCaptureResumed: + }, + onScreenCaptureResumed: (reason) { onScreenCaptureResumed(); - break; - case TRTCCloudListener.onScreenCaptureStoped: - onScreenCaptureStoped(params['reason']); - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + }, + onScreenCaptureStopped: (reason) { + onScreenCaptureStoped(reason); + } + ); } onUserVideoAvailable(String userId, bool available) { if (available && remoteViewId != null) { trtcCloud.startRemoteView( - userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, remoteViewId); + userId, TRTCVideoStreamType.big, remoteViewId!); } if (!available) { - trtcCloud.stopRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG); + trtcCloud.stopRemoteView(userId, TRTCVideoStreamType.big); } } @@ -193,11 +115,11 @@ class _ScreenAnchorPageState extends State { } destroyRoom() async { - await trtcCloud.stopScreenCapture(); - await trtcCloud.stopLocalAudio(); - await trtcCloud.exitRoom(); - trtcCloud.unRegisterListener(onTrtcListener); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopScreenCapture(); + trtcCloud.stopLocalAudio(); + trtcCloud.exitRoom(); + trtcCloud.unRegisterListener(listener); + TRTCCloud.destroySharedInstance(); } @override @@ -217,18 +139,17 @@ class _ScreenAnchorPageState extends State { case ScreenStatus.ScreenStop: setState(() { encParams.videoResolution = - TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1280_720; + TRTCVideoResolution.res_1280_720; encParams.videoBitrate = 550; encParams.videoFps = 10; if (!kIsWeb && Platform.isIOS) { - trtcCloud.startScreenCapture( - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB, encParams, - appGroup: iosExtensionName); + trtcCloud.startScreenCapture(0, + TRTCVideoStreamType.sub, encParams,); //The screen sharing function can only be tested in the real machine ReplayKitLauncher.launchReplayKitBroadcast(iosExtensionName); } else { - trtcCloud.startScreenCapture( - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB, encParams); + trtcCloud.startScreenCapture(0, + TRTCVideoStreamType.sub, encParams); } screenStatus = ScreenStatus.ScreenWait; }); diff --git a/TRTC-API-Example/lib/Basic/ScreenShare/ScreenAudiencePage.dart b/TRTC-API-Example/lib/Basic/ScreenShare/ScreenAudiencePage.dart index f684278..1d0e152 100644 --- a/TRTC-API-Example/lib/Basic/ScreenShare/ScreenAudiencePage.dart +++ b/TRTC-API-Example/lib/Basic/ScreenShare/ScreenAudiencePage.dart @@ -1,10 +1,10 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; /// ScreenAudiencePage.dart /// TRTC-API-Example-Dart @@ -23,6 +23,7 @@ class _ScreenAudiencePageState extends State { Map anchorUserIdSet = {}; int? remoteViewId; late TRTCCloud trtcCloud; + late TRTCCloudListener listener; @override void initState() { startPushStream(); @@ -35,45 +36,38 @@ class _ScreenAudiencePageState extends State { params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.widget.roomId; params.userId = this.widget.userId; - params.role = TRTCCloudDef.TRTCRoleAudience; + params.role = TRTCRoleType.audience; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); trtcCloud.callExperimentalAPI( "{\"api\": \"setFramework\", \"params\": {\"framework\": 7, \"component\": 2}}"); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.enterRoom(params, TRTCAppScene.videoCall); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); + listener = getListener(); + trtcCloud.registerListener(listener); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - break; - case TRTCCloudListener.onUserSubStreamAvailable: - onUserSubAvailable(params["userId"], params['available']); - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserSubStreamAvailable: (userId, available) { + onUserSubAvailable(userId, available); + } + ); } onUserSubAvailable(String userId, bool available) { if (available && remoteViewId != null) { trtcCloud.startRemoteView( - userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB, remoteViewId); + userId, TRTCVideoStreamType.sub, remoteViewId!); } if (!available) { - trtcCloud.stopRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB); + trtcCloud.stopRemoteView(userId, TRTCVideoStreamType.sub); } } destroyRoom() async { trtcCloud.exitRoom(); - trtcCloud.unRegisterListener(onTrtcListener); - await TRTCCloud.destroySharedInstance(); + trtcCloud.unRegisterListener(listener); + TRTCCloud.destroySharedInstance(); } @override @@ -91,7 +85,6 @@ class _ScreenAudiencePageState extends State { Container( child: TRTCCloudVideoView( key: ValueKey("remoteViewId"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { remoteViewId = viewId; diff --git a/TRTC-API-Example/lib/Basic/VideoCall/VideoCallingPage.dart b/TRTC-API-Example/lib/Basic/VideoCall/VideoCallingPage.dart index 20eca5c..e6afe66 100644 --- a/TRTC-API-Example/lib/Basic/VideoCall/VideoCallingPage.dart +++ b/TRTC-API-Example/lib/Basic/VideoCall/VideoCallingPage.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; -import 'package:tencent_trtc_cloud/tx_device_manager.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/tx_device_manager.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -28,6 +28,7 @@ class _VideoCallingPageState extends State { bool isMuteLocalAudio = false; bool isSpeaker = true; late TRTCCloud trtcCloud; + late TRTCCloudListener listener; @override void initState() { startPushStream(); @@ -43,113 +44,28 @@ class _VideoCallingPageState extends State { params.userSig = await GenerateTestUserSig.genTestSig(params.userId); trtcCloud.callExperimentalAPI( "{\"api\": \"setFramework\", \"params\": {\"framework\": 7, \"component\": 2}}"); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL); + trtcCloud.enterRoom(params, TRTCAppScene.videoCall); TRTCVideoEncParam encParams = new TRTCVideoEncParam(); - encParams.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360; + encParams.videoResolution = TRTCVideoResolution.res_640_360; encParams.videoBitrate = 550; encParams.videoFps = 15; trtcCloud.setVideoEncoderParam(encParams); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.startLocalAudio(TRTCAudioQuality.speech); + listener = getListener(); + trtcCloud.registerListener(listener); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - onRemoteUserLeaveRoom(params["userId"], params['reason']); - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - onUserVideoAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onRemoteUserLeaveRoom: (userId, reason) { + onRemoteUserLeaveRoom(userId, reason); + }, + onUserVideoAvailable: (userId, available) { + onUserVideoAvailable(userId, available); + } + ); } onRemoteUserLeaveRoom(String userId, int reason) { @@ -174,11 +90,11 @@ class _VideoCallingPageState extends State { } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.stopLocalPreview(); - await trtcCloud.exitRoom(); - trtcCloud.unRegisterListener(onTrtcListener); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.stopLocalPreview(); + trtcCloud.exitRoom(); + trtcCloud.unRegisterListener(listener); + TRTCCloud.destroySharedInstance(); } @override @@ -197,7 +113,6 @@ class _VideoCallingPageState extends State { Container( child: TRTCCloudVideoView( key: ValueKey("LocalView"), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; @@ -230,10 +145,9 @@ class _VideoCallingPageState extends State { ), child: TRTCCloudVideoView( key: ValueKey('RemoteView_$userId'), - viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { trtcCloud.startRemoteView(userId, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, viewId); + TRTCVideoStreamType.small, viewId); }, ), ); @@ -284,7 +198,7 @@ class _VideoCallingPageState extends State { onPressed: () { bool newIsOpenCamera = !isOpenCamera; if (newIsOpenCamera) { - trtcCloud.startLocalPreview(isFrontCamera, localViewId); + trtcCloud.startLocalPreview(isFrontCamera, localViewId!); } else { trtcCloud.stopLocalPreview(); } @@ -344,10 +258,10 @@ class _VideoCallingPageState extends State { bool newIsSpeaker = !isSpeaker; if (newIsSpeaker) { deviceManager.setAudioRoute( - TRTCCloudDef.TRTC_AUDIO_ROUTE_SPEAKER); + TXAudioRoute.speakerPhone); } else { deviceManager.setAudioRoute( - TRTCCloudDef.TRTC_AUDIO_ROUTE_EARPIECE); + TXAudioRoute.earpiece); } setState(() { isSpeaker = newIsSpeaker; diff --git a/TRTC-API-Example/lib/Basic/VoiceChatRoom/VoiceChatRoomAnchorPage.dart b/TRTC-API-Example/lib/Basic/VoiceChatRoom/VoiceChatRoomAnchorPage.dart index 0162107..1e294f1 100644 --- a/TRTC-API-Example/lib/Basic/VoiceChatRoom/VoiceChatRoomAnchorPage.dart +++ b/TRTC-API-Example/lib/Basic/VoiceChatRoom/VoiceChatRoomAnchorPage.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -21,6 +21,7 @@ class VoiceChatRoomAnchorPage extends StatefulWidget { class _VoiceChatRoomAnchorPageState extends State { late TRTCCloud trtcCloud; + late TRTCCloudListener listener; Map anchorUserIdSet = {}; bool isAllUserMute = false; bool isDownMic = false; @@ -36,110 +37,23 @@ class _VoiceChatRoomAnchorPageState extends State { params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.widget.roomId; params.userId = this.widget.userId; - params.role = TRTCCloudDef.TRTCRoleAnchor; + params.role = TRTCRoleType.anchor; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); trtcCloud.callExperimentalAPI( "{\"api\": \"setFramework\", \"params\": {\"framework\": 7, \"component\": 2}}"); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_VOICE_CHATROOM); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); + trtcCloud.enterRoom(params, TRTCAppScene.voiceChatRoom); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); - trtcCloud.registerListener(onTrtcListener); + listener = getListener(); + trtcCloud.registerListener(listener); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - onUserAudioAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserAudioAvailable: (userId, available) { + onUserAudioAvailable(userId, available); + } + ); } onUserAudioAvailable(String userId, bool available) { @@ -165,11 +79,11 @@ class _VoiceChatRoomAnchorPageState extends State { onDownMicClick() { bool nowIsDownMic = !isDownMic; if (nowIsDownMic) { - trtcCloud.switchRole(TRTCCloudDef.TRTCRoleAudience); + trtcCloud.switchRole(TRTCRoleType.audience); trtcCloud.stopLocalAudio(); } else { - trtcCloud.switchRole(TRTCCloudDef.TRTCRoleAnchor); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); + trtcCloud.switchRole(TRTCRoleType.anchor); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); } setState(() { isDownMic = nowIsDownMic; @@ -177,10 +91,10 @@ class _VoiceChatRoomAnchorPageState extends State { } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.exitRoom(); - trtcCloud.unRegisterListener(onTrtcListener); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.exitRoom(); + trtcCloud.unRegisterListener(listener); + TRTCCloud.destroySharedInstance(); } @override diff --git a/TRTC-API-Example/lib/Basic/VoiceChatRoom/VoiceChatRoomAudiencePage.dart b/TRTC-API-Example/lib/Basic/VoiceChatRoom/VoiceChatRoomAudiencePage.dart index c8dddaf..4f058d7 100644 --- a/TRTC-API-Example/lib/Basic/VoiceChatRoom/VoiceChatRoomAudiencePage.dart +++ b/TRTC-API-Example/lib/Basic/VoiceChatRoom/VoiceChatRoomAudiencePage.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; import 'package:trtc_api_example/Debug/GenerateTestUserSig.dart'; /// VoiceChatRoomAudiencePage.dart @@ -20,6 +20,7 @@ class VoiceChatRoomAudiencePage extends StatefulWidget { class _VoiceChatRoomAudiencePageState extends State { late TRTCCloud trtcCloud; + late TRTCCloudListener listener; Map anchorUserIdSet = {}; bool isAllUserMute = false; bool isUpMic = false; @@ -35,108 +36,21 @@ class _VoiceChatRoomAudiencePageState extends State { params.sdkAppId = GenerateTestUserSig.sdkAppId; params.roomId = this.widget.roomId; params.userId = this.widget.userId; - params.role = TRTCCloudDef.TRTCRoleAudience; + params.role = TRTCRoleType.audience; params.userSig = await GenerateTestUserSig.genTestSig(params.userId); trtcCloud.callExperimentalAPI( "{\"api\": \"setFramework\", \"params\": {\"framework\": 7, \"component\": 2}}"); - trtcCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_VOICE_CHATROOM); - trtcCloud.registerListener(onTrtcListener); + trtcCloud.enterRoom(params, TRTCAppScene.voiceChatRoom); + listener = getListener(); + trtcCloud.registerListener(listener); } - onTrtcListener(type, params) async { - switch (type) { - case TRTCCloudListener.onError: - break; - case TRTCCloudListener.onWarning: - break; - case TRTCCloudListener.onEnterRoom: - break; - case TRTCCloudListener.onExitRoom: - break; - case TRTCCloudListener.onSwitchRole: - break; - case TRTCCloudListener.onRemoteUserEnterRoom: - break; - case TRTCCloudListener.onRemoteUserLeaveRoom: - break; - case TRTCCloudListener.onConnectOtherRoom: - break; - case TRTCCloudListener.onDisConnectOtherRoom: - break; - case TRTCCloudListener.onSwitchRoom: - break; - case TRTCCloudListener.onUserVideoAvailable: - break; - case TRTCCloudListener.onUserSubStreamAvailable: - break; - case TRTCCloudListener.onUserAudioAvailable: - onUserAudioAvailable(params["userId"], params['available']); - break; - case TRTCCloudListener.onFirstVideoFrame: - break; - case TRTCCloudListener.onFirstAudioFrame: - break; - case TRTCCloudListener.onSendFirstLocalVideoFrame: - break; - case TRTCCloudListener.onSendFirstLocalAudioFrame: - break; - case TRTCCloudListener.onNetworkQuality: - break; - case TRTCCloudListener.onStatistics: - break; - case TRTCCloudListener.onConnectionLost: - break; - case TRTCCloudListener.onTryToReconnect: - break; - case TRTCCloudListener.onConnectionRecovery: - break; - case TRTCCloudListener.onSpeedTest: - break; - case TRTCCloudListener.onCameraDidReady: - break; - case TRTCCloudListener.onMicDidReady: - break; - case TRTCCloudListener.onUserVoiceVolume: - break; - case TRTCCloudListener.onRecvCustomCmdMsg: - break; - case TRTCCloudListener.onMissCustomCmdMsg: - break; - case TRTCCloudListener.onRecvSEIMsg: - break; - case TRTCCloudListener.onStartPublishing: - break; - case TRTCCloudListener.onStopPublishing: - break; - case TRTCCloudListener.onStartPublishCDNStream: - break; - case TRTCCloudListener.onStopPublishCDNStream: - break; - case TRTCCloudListener.onSetMixTranscodingConfig: - break; - case TRTCCloudListener.onMusicObserverStart: - break; - case TRTCCloudListener.onMusicObserverPlayProgress: - break; - case TRTCCloudListener.onMusicObserverComplete: - break; - case TRTCCloudListener.onSnapshotComplete: - break; - case TRTCCloudListener.onScreenCaptureStarted: - break; - case TRTCCloudListener.onScreenCapturePaused: - break; - case TRTCCloudListener.onScreenCaptureResumed: - break; - case TRTCCloudListener.onScreenCaptureStoped: - break; - case TRTCCloudListener.onDeviceChange: - break; - case TRTCCloudListener.onTestMicVolume: - break; - case TRTCCloudListener.onTestSpeakerVolume: - break; - } + TRTCCloudListener getListener() { + return TRTCCloudListener( + onUserAudioAvailable: (userId, available) { + onUserAudioAvailable(userId, available); + } + ); } onUserAudioAvailable(String userId, bool available) { @@ -162,10 +76,10 @@ class _VoiceChatRoomAudiencePageState extends State { onUpMicClick() { bool nowIsUpMic = !isUpMic; if (nowIsUpMic) { - trtcCloud.switchRole(TRTCCloudDef.TRTCRoleAnchor); - trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC); + trtcCloud.switchRole(TRTCRoleType.anchor); + trtcCloud.startLocalAudio(TRTCAudioQuality.music); } else { - trtcCloud.switchRole(TRTCCloudDef.TRTCRoleAudience); + trtcCloud.switchRole(TRTCRoleType.audience); trtcCloud.stopLocalAudio(); } setState(() { @@ -174,10 +88,10 @@ class _VoiceChatRoomAudiencePageState extends State { } destroyRoom() async { - await trtcCloud.stopLocalAudio(); - await trtcCloud.exitRoom(); - trtcCloud.unRegisterListener(onTrtcListener); - await TRTCCloud.destroySharedInstance(); + trtcCloud.stopLocalAudio(); + trtcCloud.exitRoom(); + trtcCloud.unRegisterListener(listener); + TRTCCloud.destroySharedInstance(); } @override diff --git a/TRTC-API-Example/lib/Common/ExampleData.dart b/TRTC-API-Example/lib/Common/ExampleData.dart index 5e7bdf2..7ed6972 100644 --- a/TRTC-API-Example/lib/Common/ExampleData.dart +++ b/TRTC-API-Example/lib/Common/ExampleData.dart @@ -1,10 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:trtc_api_example/Advanced/AudioFrameCustomProcess/AudioFrameCustomProcess.dart'; -import 'package:trtc_api_example/Advanced/JoinMultipleRoom/JoinMultipleRoomPage.dart'; import 'package:trtc_api_example/Advanced/PublishMediaStream/PublishMediaStreamSelectRolePage.dart'; -import 'package:trtc_api_example/Advanced/TextureRendering/TextureEnterPage.dart'; import 'package:trtc_api_example/Advanced/LocalRecord/LocalRecordPage.dart'; -import 'package:trtc_api_example/Advanced/PushCDN/PushCDNSelectRolePage.dart'; import 'package:trtc_api_example/Advanced/RoomPk/RoomPkPage.dart'; import 'package:trtc_api_example/Advanced/SEIMessage/SendAndReceiveSEIMessagePage.dart'; import 'package:trtc_api_example/Advanced/SetAudioEffect/SetAudioEffectPage.dart'; @@ -73,14 +70,6 @@ class ExampleData { title: AppLocalizations.of(context)!.main_item_speed_test, detailPage: SpeedTestPage(), ), - ExamplePageItem( - title: AppLocalizations.of(context)!.main_item_pushcdn, - detailPage: PushCDNSelectRolePage(), - ), - ExamplePageItem( - title: AppLocalizations.of(context)!.texture_render, - detailPage: TextureEnterPage(), - ), ExamplePageItem( title: AppLocalizations.of(context)!.main_rtrc_set_audio_effect, detailPage: SetAudioEffectPage(), @@ -101,10 +90,6 @@ class ExampleData { title: AppLocalizations.of(context)!.main_item_switch_room, detailPage: SwitchRoomPage(), ), - ExamplePageItem( - title: AppLocalizations.of(context)!.main_item_join_multiple_room, - detailPage: JoinMultipleRoomPage(), - ), ExamplePageItem( title: AppLocalizations.of(context)!.main_trtc_connect_other_room_pk, detailPage: RoomPkPage(), diff --git a/TRTC-API-Example/macos/Flutter/GeneratedPluginRegistrant.swift b/TRTC-API-Example/macos/Flutter/GeneratedPluginRegistrant.swift index 1fb21f9..4d50393 100644 --- a/TRTC-API-Example/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/TRTC-API-Example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,9 +6,9 @@ import FlutterMacOS import Foundation import path_provider_foundation -import tencent_trtc_cloud +import tencent_rtc_sdk func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) - TencentTRTCCloud.register(with: registry.registrar(forPlugin: "TencentTRTCCloud")) + TencentRTCCloud.register(with: registry.registrar(forPlugin: "TencentRTCCloud")) } diff --git a/TRTC-API-Example/pubspec.lock b/TRTC-API-Example/pubspec.lock index 2e32906..78ae276 100644 --- a/TRTC-API-Example/pubspec.lock +++ b/TRTC-API-Example/pubspec.lock @@ -6,7 +6,7 @@ packages: description: name: async sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.11.0" boolean_selector: @@ -14,7 +14,7 @@ packages: description: name: boolean_selector sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" characters: @@ -22,7 +22,7 @@ packages: description: name: characters sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" clock: @@ -30,7 +30,7 @@ packages: description: name: clock sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" collection: @@ -38,31 +38,31 @@ packages: description: name: collection sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.18.0" crypto: dependency: "direct main" description: name: crypto - sha256: cf75650c66c0316274e21d7c43d3dea246273af5955bd94e8184837cd577575c - url: "https://pub.dev" + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.flutter-io.cn" source: hosted - version: "3.0.1" + version: "3.0.6" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - sha256: "1989d917fbe8e6b39806207df5a3fdd3d816cbd090fac2ce26fb45e9a71476e5" - url: "https://pub.dev" + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.flutter-io.cn" source: hosted - version: "1.0.4" + version: "1.0.8" event_bus: dependency: "direct main" description: name: event_bus sha256: "1a55e97923769c286d295240048fc180e7b0768902c3c2e869fe059aafa15304" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" fake_async: @@ -70,23 +70,23 @@ packages: description: name: fake_async sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" ffi: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" - url: "https://pub.dev" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.0" + version: "2.1.3" file: dependency: "direct main" description: name: file sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.1.4" flutter: @@ -99,7 +99,7 @@ packages: description: name: flutter_lints sha256: b543301ad291598523947dc534aaddc5aaad597b709d2426d3a0e0d44c5cb493 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" flutter_localizations: @@ -122,31 +122,23 @@ packages: description: name: intl sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.19.0" - js: - dependency: transitive - description: - name: js - sha256: a5e201311cb08bf3912ebbe9a2be096e182d703f881136ec1e81a2338a9e120d - url: "https://pub.dev" - source: hosted - version: "0.6.4" json_annotation: dependency: transitive description: name: json_annotation - sha256: fd56fb29e3f02cd9bef80e99e9491d27889fb010f98ff3379b21e7d40d0112b3 - url: "https://pub.dev" + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.flutter-io.cn" source: hosted - version: "4.0.1" + version: "4.9.0" leak_tracker: dependency: transitive description: name: leak_tracker sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "10.0.5" leak_tracker_flutter_testing: @@ -154,7 +146,7 @@ packages: description: name: leak_tracker_flutter_testing sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.5" leak_tracker_testing: @@ -162,7 +154,7 @@ packages: description: name: leak_tracker_testing sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" lints: @@ -170,7 +162,7 @@ packages: description: name: lints sha256: a2c3d198cb5ea2e179926622d433331d8b58374ab8f29cdda6e863bd62fd369c - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" matcher: @@ -178,7 +170,7 @@ packages: description: name: matcher sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.16+1" material_color_utilities: @@ -186,7 +178,7 @@ packages: description: name: material_color_utilities sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.11.1" meta: @@ -194,7 +186,7 @@ packages: description: name: meta sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.15.0" oktoast: @@ -202,7 +194,7 @@ packages: description: name: oktoast sha256: f1366c5c793ddfb8f55bc6fc3e45db43c45debf173b765fb4c5ec096cbdeb84a - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.4.0" path: @@ -210,7 +202,7 @@ packages: description: name: path sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.9.0" path_provider: @@ -218,47 +210,47 @@ packages: description: name: path_provider sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.5" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a - url: "https://pub.dev" + sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.2.12" + version: "2.2.10" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" - url: "https://pub.dev" + sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 + url: "https://pub.flutter-io.cn" source: hosted - version: "2.3.2" + version: "2.4.0" path_provider_linux: dependency: transitive description: name: path_provider_linux sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.1" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" - url: "https://pub.dev" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.1" + version: "2.1.2" path_provider_windows: dependency: transitive description: name: path_provider_windows sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.0" permission_handler: @@ -266,7 +258,7 @@ packages: description: name: permission_handler sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "11.3.1" permission_handler_android: @@ -274,7 +266,7 @@ packages: description: name: permission_handler_android sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "12.0.13" permission_handler_apple: @@ -282,23 +274,23 @@ packages: description: name: permission_handler_apple sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "9.4.5" permission_handler_html: dependency: transitive description: name: permission_handler_html - sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851 - url: "https://pub.dev" + sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.1.3+2" + version: "0.1.3+5" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.2.3" permission_handler_windows: @@ -306,39 +298,31 @@ packages: description: name: permission_handler_windows sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.1" platform: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" - url: "https://pub.dev" + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.flutter-io.cn" source: hosted - version: "3.1.0" + version: "3.1.6" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: "075f927ebbab4262ace8d0b283929ac5410c0ac4e7fc123c76429564facfb757" - url: "https://pub.dev" + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.2" - process: - dependency: transitive - description: - name: process - sha256: ca157bb5ee3a2dce23ac17bac6d5e54c9d7d1b693f560b606a84aacd2f3c54f8 - url: "https://pub.dev" - source: hosted - version: "4.2.3" + version: "2.1.8" replay_kit_launcher: dependency: "direct main" description: name: replay_kit_launcher sha256: "8c7d641e32484eee13b99f3d51a4825f9fec8aec7784e005c97ca37bb591063b" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" sky_engine: @@ -351,7 +335,7 @@ packages: description: name: source_span sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.10.0" stack_trace: @@ -359,7 +343,7 @@ packages: description: name: stack_trace sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.11.1" stream_channel: @@ -367,7 +351,7 @@ packages: description: name: stream_channel sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" string_scanner: @@ -375,23 +359,23 @@ packages: description: name: string_scanner sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" - tencent_trtc_cloud: + tencent_rtc_sdk: dependency: "direct main" description: - name: tencent_trtc_cloud - sha256: "303b43deca431b31a59eb709ff6c1df586af8ca170f2b15ebccff106d7ba8f60" - url: "https://pub.dev" + name: tencent_rtc_sdk + sha256: "5bb0e02b284b1d05a9e26a8af146234f404c74d6991a28be11de18590e7c9674" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.9.1" + version: "12.2.1" term_glyph: dependency: transitive description: name: term_glyph sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.1" test_api: @@ -399,23 +383,23 @@ packages: description: name: test_api sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.2" typed_data: dependency: transitive description: name: typed_data - sha256: "53bdf7e979cfbf3e28987552fd72f637e63f3c8724c9e56d9246942dc2fa36ee" - url: "https://pub.dev" + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.flutter-io.cn" source: hosted - version: "1.3.0" + version: "1.3.2" vector_math: dependency: transitive description: name: vector_math sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.4" vm_service: @@ -423,7 +407,7 @@ packages: description: name: vm_service sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "14.2.5" web: @@ -431,17 +415,17 @@ packages: description: name: web sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: "060b6e1c891d956f72b5ac9463466c37cce3fa962a921532fc001e86fe93438e" - url: "https://pub.dev" + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.2.0+1" + version: "1.1.0" sdks: - dart: ">=3.5.0 <4.0.0" - flutter: ">=3.24.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/TRTC-API-Example/pubspec.yaml b/TRTC-API-Example/pubspec.yaml index ae3804f..5f0befd 100644 --- a/TRTC-API-Example/pubspec.yaml +++ b/TRTC-API-Example/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: replay_kit_launcher: ^1.0.0 file: ^6.1.4 intl: ^0.19.0 - tencent_trtc_cloud: ^2.9.1 + tencent_rtc_sdk: ^12.2.1 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. diff --git a/TRTC-API-Example/web/favicon.png b/TRTC-API-Example/web/favicon.png deleted file mode 100644 index 8aaa46a..0000000 Binary files a/TRTC-API-Example/web/favicon.png and /dev/null differ diff --git a/TRTC-API-Example/web/icons/Icon-192.png b/TRTC-API-Example/web/icons/Icon-192.png deleted file mode 100644 index b749bfe..0000000 Binary files a/TRTC-API-Example/web/icons/Icon-192.png and /dev/null differ diff --git a/TRTC-API-Example/web/icons/Icon-512.png b/TRTC-API-Example/web/icons/Icon-512.png deleted file mode 100644 index 88cfd48..0000000 Binary files a/TRTC-API-Example/web/icons/Icon-512.png and /dev/null differ diff --git a/TRTC-API-Example/web/index.html b/TRTC-API-Example/web/index.html deleted file mode 100644 index a245e59..0000000 --- a/TRTC-API-Example/web/index.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - trtc_api_example - - - - - - - diff --git a/TRTC-API-Example/web/manifest.json b/TRTC-API-Example/web/manifest.json deleted file mode 100644 index 41c1f38..0000000 --- a/TRTC-API-Example/web/manifest.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "trtc_api_example", - "short_name": "trtc_api_example", - "start_url": ".", - "display": "standalone", - "background_color": "#0175C2", - "theme_color": "#0175C2", - "description": "TRTC API Example helps developers can better understand TRTC real -time audio and video SDK APIs, so as to quickly realize the basic functions of some audio and video scenarios.", - "orientation": "portrait-primary", - "prefer_related_applications": false, - "icons": [ - { - "src": "icons/Icon-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "icons/Icon-512.png", - "sizes": "512x512", - "type": "image/png" - } - ] -} diff --git a/TRTC-API-Example/windows/flutter/generated_plugin_registrant.cc b/TRTC-API-Example/windows/flutter/generated_plugin_registrant.cc index 33c531f..e480634 100644 --- a/TRTC-API-Example/windows/flutter/generated_plugin_registrant.cc +++ b/TRTC-API-Example/windows/flutter/generated_plugin_registrant.cc @@ -7,11 +7,11 @@ #include "generated_plugin_registrant.h" #include -#include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { PermissionHandlerWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); - TencentTrtcCloudPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("TencentTrtcCloudPlugin")); + TrtcPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("TrtcPluginCApi")); } diff --git a/TRTC-API-Example/windows/flutter/generated_plugins.cmake b/TRTC-API-Example/windows/flutter/generated_plugins.cmake index c749932..877cdb5 100644 --- a/TRTC-API-Example/windows/flutter/generated_plugins.cmake +++ b/TRTC-API-Example/windows/flutter/generated_plugins.cmake @@ -4,7 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST permission_handler_windows - tencent_trtc_cloud + tencent_rtc_sdk ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/TRTC-Simple-Demo/android/.gitignore b/TRTC-Simple-Demo/android/.gitignore deleted file mode 100644 index bc2100d..0000000 --- a/TRTC-Simple-Demo/android/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java diff --git a/TRTC-Simple-Demo/android/app/build.gradle b/TRTC-Simple-Demo/android/app/build.gradle index 745f2e6..9bc9218 100644 --- a/TRTC-Simple-Demo/android/app/build.gradle +++ b/TRTC-Simple-Demo/android/app/build.gradle @@ -22,24 +22,39 @@ if (flutterVersionName == null) { } apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 33 + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion - lintOptions { - disable 'InvalidPackage' + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + + packagingOptions { + pickFirst 'lib/**/libliteavsdk.so' + } + sourceSets { + main.java.srcDirs += 'src/main/kotlin' } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.tencent.trtc_demo" - minSdkVersion 19 - targetSdkVersion 31 - multiDexEnabled true + applicationId "com.example.ffi_test_example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -49,11 +64,6 @@ android { signingConfig signingConfigs.debug } } - compileOptions { - sourceCompatibility = 1.8 - targetCompatibility = 1.8 - } - // buildToolsVersion = '26.0.2' } flutter { @@ -61,8 +71,5 @@ flutter { } dependencies { - implementation 'com.android.support:multidex:2.0.1' - testImplementation 'junit:junit:4.13.1' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } diff --git a/TRTC-Simple-Demo/android/app/src/debug/AndroidManifest.xml b/TRTC-Simple-Demo/android/app/src/debug/AndroidManifest.xml index dd6c3b0..f00bb24 100644 --- a/TRTC-Simple-Demo/android/app/src/debug/AndroidManifest.xml +++ b/TRTC-Simple-Demo/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,7 @@ - diff --git a/TRTC-Simple-Demo/android/app/src/main/AndroidManifest.xml b/TRTC-Simple-Demo/android/app/src/main/AndroidManifest.xml index 45a4bcb..eb5aeba 100644 --- a/TRTC-Simple-Demo/android/app/src/main/AndroidManifest.xml +++ b/TRTC-Simple-Demo/android/app/src/main/AndroidManifest.xml @@ -1,11 +1,6 @@ - + package="com.example.ffi_test_example"> + @@ -20,16 +15,10 @@ - - + + + - = Build.VERSION_CODES.O) { - //Call Start foreground with notification - Intent notificationIntent = new Intent(this, MediaService.class); - // PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); - PendingIntent pendingIntent = null; - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { - pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE); - } else { - pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); - } - NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) -// .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_foreground)) -// .setSmallIcon(R.drawable.ic_launcher_foreground) - .setContentTitle("Starting Service") - .setContentText("Starting monitoring service") - .setContentIntent(pendingIntent); - Notification notification = notificationBuilder.build(); - NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); - channel.setDescription(NOTIFICATION_CHANNEL_DESC); - NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.createNotificationChannel(channel); - startForeground(1, notification); //You must use this method to display the notification. You cannot use NotificationManager.notify, otherwise you will still report the above error - } - } - - @Override - public IBinder onBind(Intent intent) { - throw new UnsupportedOperationException("Not yet implemented"); - } -} \ No newline at end of file diff --git a/TRTC-Simple-Demo/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/TRTC-Simple-Demo/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java new file mode 100644 index 0000000..38f4a3d --- /dev/null +++ b/TRTC-Simple-Demo/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -0,0 +1,39 @@ +package io.flutter.plugins; + +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import io.flutter.Log; + +import io.flutter.embedding.engine.FlutterEngine; + +/** + * Generated file. Do not edit. + * This file is generated by the Flutter tool based on the + * plugins that support the Android platform. + */ +@Keep +public final class GeneratedPluginRegistrant { + private static final String TAG = "GeneratedPluginRegistrant"; + public static void registerWith(@NonNull FlutterEngine flutterEngine) { + try { + flutterEngine.getPlugins().add(new xyz.luan.audioplayers.AudioplayersPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin audioplayers_android, xyz.luan.audioplayers.AudioplayersPlugin", e); + } + try { + flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin path_provider_android, io.flutter.plugins.pathprovider.PathProviderPlugin", e); + } + try { + flutterEngine.getPlugins().add(new com.baseflow.permissionhandler.PermissionHandlerPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin permission_handler_android, com.baseflow.permissionhandler.PermissionHandlerPlugin", e); + } + try { + flutterEngine.getPlugins().add(new com.tencent.trtcplugin.TRTCPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin tencent_rtc_sdk, com.tencent.trtcplugin.TRTCPlugin", e); + } + } +} diff --git a/TRTC-Simple-Demo/android/app/src/main/java/opengl/FrameBuffer.java b/TRTC-Simple-Demo/android/app/src/main/java/opengl/FrameBuffer.java deleted file mode 100644 index a826fe2..0000000 --- a/TRTC-Simple-Demo/android/app/src/main/java/opengl/FrameBuffer.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.tencent.trtc_demo.opengl; - -import android.opengl.GLES20; -import android.util.Log; - -import static com.tencent.trtc_demo.opengl.GLConstants.NO_TEXTURE; - - -public class FrameBuffer { - - private static final String TAG = "FrameBuffer"; - - private final int mWidth; - private final int mHeight; - private int mTextureId; - private int mFrameBufferId; - - public FrameBuffer(int width, int height) { - mWidth = width; - mHeight = height; - } - - public void initialize() { - mTextureId = OpenGlUtils.loadTexture(GLES20.GL_RGBA, null, mWidth, mHeight, NO_TEXTURE); - mFrameBufferId = OpenGlUtils.generateFrameBufferId(); - Log.i(TAG, String.format("create frameBufferId: %d, textureId: %d", mFrameBufferId, mTextureId)); - - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureId); - GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFrameBufferId); - GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, - GLES20.GL_TEXTURE_2D, mTextureId, 0); - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); - GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); - } - - public int getTextureId() { - return mTextureId; - } - - public int getFrameBufferId() { - return mFrameBufferId; - } - - public int getWidth() { - return mWidth; - } - - public int getHeight() { - return mHeight; - } - - public void uninitialize() { - Log.i(TAG, String.format("destroy frameBufferId: %d, textureId: %d", mFrameBufferId, mTextureId)); - OpenGlUtils.deleteTexture(mTextureId); - mTextureId = NO_TEXTURE; - OpenGlUtils.deleteFrameBuffer(mFrameBufferId); - mFrameBufferId = NO_TEXTURE; - } -} diff --git a/TRTC-Simple-Demo/android/app/src/main/java/opengl/GLConstants.java b/TRTC-Simple-Demo/android/app/src/main/java/opengl/GLConstants.java deleted file mode 100644 index 7732ed7..0000000 --- a/TRTC-Simple-Demo/android/app/src/main/java/opengl/GLConstants.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.tencent.trtc_demo.opengl; - -public interface GLConstants { - boolean DEBUG = false; - int NO_TEXTURE = -1; - int INVALID_PROGRAM_ID = -1; - - float[] CUBE_VERTICES_ARRAYS = { - -1.0f, -1.0f, - 1.0f, -1.0f, - -1.0f, 1.0f, - 1.0f, 1.0f - }; - - float[] TEXTURE_COORDS_NO_ROTATION = { - 0.0f, 0.0f, - 1.0f, 0.0f, - 0.0f, 1.0f, - 1.0f, 1.0f - }; - float[] TEXTURE_COORDS_ROTATE_LEFT = { - 1.0f, 0.0f, - 1.0f, 1.0f, - 0.0f, 0.0f, - 0.0f, 1.0f - }; - float[] TEXTURE_COORDS_ROTATE_RIGHT = { - 0.0f, 1.0f, - 0.0f, 0.0f, - 1.0f, 1.0f, - 1.0f, 0.0f - }; - float[] TEXTURE_COORDS_ROTATED_180 = { - 1.0f, 1.0f, - 0.0f, 1.0f, - 1.0f, 0.0f, - 0.0f, 0.0f - }; - - enum GLScaleType { - /** - * Due to the middle show, no cutting, wide or high -leaving black edge - */ - FIT_CENTER, - - /** - * Cut - */ - CENTER_CROP, - } -} diff --git a/TRTC-Simple-Demo/android/app/src/main/java/opengl/GPUImageFilter.java b/TRTC-Simple-Demo/android/app/src/main/java/opengl/GPUImageFilter.java deleted file mode 100644 index 3999038..0000000 --- a/TRTC-Simple-Demo/android/app/src/main/java/opengl/GPUImageFilter.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (C) 2012 CyberAgent - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.tencent.trtc_demo.opengl; - -import android.opengl.GLES20; -import java.nio.FloatBuffer; -import java.util.LinkedList; - -import static com.tencent.trtc_demo.opengl.GLConstants.NO_TEXTURE; - -public class GPUImageFilter { - - public static final String NO_FILTER_VERTEX_SHADER = "" - + "attribute vec4 position;\n" - + "attribute vec4 inputTextureCoordinate;\n" - + " \n" - + "varying vec2 textureCoordinate;\n" - + " \n" - + "void main()\n" - + "{\n" - + " gl_Position = position;\n" - + " textureCoordinate = inputTextureCoordinate.xy;\n" - + "}"; - - public static final String NO_FILTER_FRAGMENT_SHADER = "" - + "varying highp vec2 textureCoordinate;\n" - + " \n" - + "uniform sampler2D inputImageTexture;\n" - + " \n" - + "void main()\n" - + "{\n" - + " gl_FragColor = texture2D(inputImageTexture, textureCoordinate);\n" - + "}"; - - public static final String NO_FILTER_FRAGMENT_SHADER_FLIP = "" - + "varying highp vec2 textureCoordinate;\n" - + " \n" - + "uniform sampler2D inputImageTexture;\n" - + " \n" - + "void main()\n" - + "{\n" - + " gl_FragColor = texture2D(inputImageTexture, vec2(textureCoordinate.x, 1.0 - textureCoordinate.y))" - + ";\n" - + "}"; - - - private final LinkedList mRunOnDraw; - protected final Program mProgram; - - protected float[] mTextureMatrix; - private int mGLAttribPosition; - private int mGLUniformTexture; - private int mGLAttribTextureCoordinate; - private boolean mIsInitialized; - - public GPUImageFilter() { - this(false); - } - - public GPUImageFilter(boolean flip) { - this(NO_FILTER_VERTEX_SHADER, flip ? NO_FILTER_FRAGMENT_SHADER_FLIP : NO_FILTER_FRAGMENT_SHADER); - } - - public GPUImageFilter(final String vertexShader, final String fragmentShader) { - mRunOnDraw = new LinkedList<>(); - mProgram = new Program(vertexShader, fragmentShader); - } - - public final void init() { - onInit(); - mIsInitialized = true; - } - - protected void onInit() { - mProgram.build(); - mGLAttribPosition = GLES20.glGetAttribLocation(mProgram.getProgramId(), "position"); - mGLUniformTexture = GLES20.glGetUniformLocation(mProgram.getProgramId(), "inputImageTexture"); - mGLAttribTextureCoordinate = GLES20.glGetAttribLocation(mProgram.getProgramId(), "inputTextureCoordinate"); - mIsInitialized = true; - } - - public void onOutputSizeChanged(final int width, final int height) { - } - - protected void onUninit() { - } - - public final void destroy() { - runPendingOnDrawTasks(); - onUninit(); - mIsInitialized = false; - mProgram.destroy(); - } - - public int getTarget() { - return GLES20.GL_TEXTURE_2D; - } - - public void setTexutreTransform(float[] matrix) { - mTextureMatrix = matrix; - } - - public boolean isInitialized() { - return mIsInitialized; - } - - /** - * Rendering - * - * @param textureId - * @param cubeBuffer - * @param textureBuffer - */ - public void onDraw(final int textureId, final FloatBuffer cubeBuffer, final FloatBuffer textureBuffer) { - GLES20.glUseProgram(mProgram.getProgramId()); - runPendingOnDrawTasks(); - if (!mIsInitialized) { - return; - } - - cubeBuffer.position(0); - GLES20.glVertexAttribPointer(mGLAttribPosition, 2, GLES20.GL_FLOAT, false, 0, cubeBuffer); - GLES20.glEnableVertexAttribArray(mGLAttribPosition); - textureBuffer.position(0); - GLES20.glVertexAttribPointer(mGLAttribTextureCoordinate, 2, GLES20.GL_FLOAT, false, 0, - textureBuffer); - GLES20.glEnableVertexAttribArray(mGLAttribTextureCoordinate); - - if (textureId != NO_TEXTURE) { - GLES20.glActiveTexture(GLES20.GL_TEXTURE0); - OpenGlUtils.bindTexture(getTarget(), textureId); - GLES20.glUniform1i(mGLUniformTexture, 0); - } - - beforeDrawArrays(textureId); - GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); - GLES20.glDisableVertexAttribArray(mGLAttribPosition); - GLES20.glDisableVertexAttribArray(mGLAttribTextureCoordinate); - - OpenGlUtils.bindTexture(getTarget(), 0); - } - - protected void beforeDrawArrays(int textureId) { - } - - protected void runPendingOnDrawTasks() { - // Copy the currently to run to the new array, and then start executing to prevent the execution from adding it again - LinkedList runList; - synchronized (mRunOnDraw) { - runList = new LinkedList<>(mRunOnDraw); - mRunOnDraw.clear(); - } - - while (!runList.isEmpty()) { - runList.removeFirst().run(); - } - } -} diff --git a/TRTC-Simple-Demo/android/app/src/main/java/opengl/GpuImageGrayscaleFilter.java b/TRTC-Simple-Demo/android/app/src/main/java/opengl/GpuImageGrayscaleFilter.java deleted file mode 100644 index f0e32fc..0000000 --- a/TRTC-Simple-Demo/android/app/src/main/java/opengl/GpuImageGrayscaleFilter.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.tencent.trtc_demo.opengl; - -public class GpuImageGrayscaleFilter extends GPUImageFilter { - private static final String GRAY_SCALE_FRAGMENT_SHADER = "" - + "precision highp float;\n" - + "\n" - + "varying vec2 textureCoordinate;\n" - + "\n" - + "uniform sampler2D inputImageTexture;\n" - + "\n" - + "const highp vec3 W = vec3(0.2125, 0.7154, 0.0721);\n" - + "\n" - + "void main()\n" - + "{\n" - + " lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);\n" - + " float luminance = dot(textureColor.rgb, W);\n" - + "\n" - + " gl_FragColor = vec4(vec3(luminance), textureColor.a);\n" - + "}"; - - public GpuImageGrayscaleFilter() { - super(NO_FILTER_VERTEX_SHADER, GRAY_SCALE_FRAGMENT_SHADER); - } -} diff --git a/TRTC-Simple-Demo/android/app/src/main/java/opengl/OpenGlUtils.java b/TRTC-Simple-Demo/android/app/src/main/java/opengl/OpenGlUtils.java deleted file mode 100644 index b220f17..0000000 --- a/TRTC-Simple-Demo/android/app/src/main/java/opengl/OpenGlUtils.java +++ /dev/null @@ -1,377 +0,0 @@ -package com.tencent.trtc_demo.opengl; - -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.opengl.GLES11Ext; -import android.opengl.GLES20; -import android.opengl.GLUtils; -import android.util.Log; -import android.util.Pair; - -import java.nio.Buffer; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.FloatBuffer; -import java.text.SimpleDateFormat; -import java.util.Date; - -import javax.microedition.khronos.opengles.GL10; - - -public class OpenGlUtils { - - private static final String TAG = "OpenGlUtils"; - private static final boolean DEBUG = false; - public static final int NO_TEXTURE = -1; - public static final int NOT_INIT = -1; - public static final int ON_DRAWN = 1; - - public static void bindTexture(int target, int texture) { - GLES20.glBindTexture(target, texture); - checkGlError("bindTexture(" + texture + ")"); - } - - public static void bindFramebuffer(int target, int framebuffer) { - GLES20.glBindFramebuffer(target, framebuffer); - checkGlError("bindTexture(" + framebuffer + ")"); - } - - public static int generateTextureOES() { - int[] texture = new int[1]; - GLES20.glGenTextures(1, texture, 0); - GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, texture[0]); - GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); - GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); - GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); - return texture[0]; - } - - public static int createTexture(int width, int height, int internalFormat, int format) { - int[] textureIds = new int[1]; - GLES20.glGenTextures(1, textureIds, 0); - if (DEBUG) { - Log.d(TAG, "glGenTextures textureId: " + textureIds[0]); - } - - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIds[0]); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - - GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, internalFormat, width, height, 0, format, GLES20.GL_UNSIGNED_BYTE, - null); - return textureIds[0]; - } - - /** - * Loading texture - * - * @param img - * @param usedTexId - * @param recycle - * @return - */ - public static int loadTexture(final Bitmap img, final int usedTexId, final boolean recycle) { - int[] textureArr = new int[1]; - if (usedTexId == NO_TEXTURE) { - GLES20.glGenTextures(1, textureArr, 0); - if (DEBUG) { - Log.d(TAG, "glGenTextures texture Id : " + textureArr[0]); - } - - bindTexture(GLES20.GL_TEXTURE_2D, textureArr[0]); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, img, 0); - } else { - bindTexture(GLES20.GL_TEXTURE_2D, usedTexId); - GLUtils.texSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, img); - textureArr[0] = usedTexId; - } - if (recycle) { - img.recycle(); - } - return textureArr[0]; - } - - /** - * Loading texture - * - * @param format - * @param data - * @param width - * @param height - * @param usedTexId - * @return - */ - public static int loadTexture(int format, Buffer data, int width, int height, int usedTexId) { - int[] textures = new int[1]; - if (usedTexId == NO_TEXTURE) { - GLES20.glGenTextures(1, textures, 0); - if (DEBUG) { - Log.d(TAG, "glGenTextures textureId: " + textures[0]); - } - - bindTexture(GLES20.GL_TEXTURE_2D, textures[0]); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, format, width, height, 0, format, GLES20.GL_UNSIGNED_BYTE, - data); - } else { - bindTexture(GLES20.GL_TEXTURE_2D, usedTexId); - GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, width, height, format, GLES20.GL_UNSIGNED_BYTE, data); - textures[0] = usedTexId; - } - return textures[0]; - } - - public static int generateFrameBufferId() { - int[] ids = new int[1]; - GLES20.glGenFramebuffers(1, ids, 0); - return ids[0]; - } - - public static void deleteTexture(int textureId) { - if (textureId != NO_TEXTURE) { - GLES20.glDeleteTextures(1, new int[]{textureId}, 0); - if (DEBUG) { - Log.d(TAG, "delete textureId " + textureId); - } - } - } - - public static void deleteFrameBuffer(int frameBufferId) { - if (frameBufferId != NO_TEXTURE) { - GLES20.glDeleteFramebuffers(1, new int[]{frameBufferId}, 0); - Log.d(TAG, "delete frame buffer id: " + frameBufferId); - } - } - - public static FloatBuffer createNormalCubeVerticesBuffer() { - return (FloatBuffer) ByteBuffer.allocateDirect(GLConstants.CUBE_VERTICES_ARRAYS.length * 4) - .order(ByteOrder.nativeOrder()) - .asFloatBuffer() - .put(GLConstants.CUBE_VERTICES_ARRAYS) - .position(0); - } - - public static FloatBuffer createTextureCoordsBuffer(Rotation rotation, boolean flipHorizontal, - boolean flipVertical) { - float[] temp = new float[GLConstants.TEXTURE_COORDS_NO_ROTATION.length]; - initTextureCoordsBuffer(temp, rotation, flipHorizontal, flipVertical); - - FloatBuffer buffer = ByteBuffer.allocateDirect(GLConstants.TEXTURE_COORDS_NO_ROTATION.length * 4) - .order(ByteOrder.nativeOrder()) - .asFloatBuffer(); - buffer.put(temp).position(0); - return buffer; - } - - /** - * By input and output width, calculate the vertex array and texture array - * - * @param scaleType Scaling - * @param inputRotation Enter the rotation angle of texture - * @param needFlipHorizontal Whether mirror mapping treatment - * @param inputWith Enter the width of the texture (unprocessed) - * @param inputHeight Enter the height of the texture (unprocessed) - * @param outputWidth The width of the target - * @param outputHeight High drawing goals - * @return Return to vertex arrays and texture arrays - */ - public static Pair calcCubeAndTextureBuffer(GLConstants.GLScaleType scaleType, - Rotation inputRotation, - boolean needFlipHorizontal, - int inputWith, - int inputHeight, - int outputWidth, - int outputHeight) { - - boolean needRotate = (inputRotation == Rotation.ROTATION_90 || inputRotation == Rotation.ROTATION_270); - int rotatedWidth = needRotate ? inputHeight : inputWith; - int rotatedHeight = needRotate ? inputWith : inputHeight; - float maxRratio = Math.max(1.0f * outputWidth / rotatedWidth, 1.0f * outputHeight / rotatedHeight); - float ratioWidth = 1.0f * Math.round(rotatedWidth * maxRratio) / outputWidth; - float ratioHeight = 1.0f * Math.round(rotatedHeight * maxRratio) / outputHeight; - - float[] cube = GLConstants.CUBE_VERTICES_ARRAYS; - float[] textureCoords = new float[GLConstants.TEXTURE_COORDS_ROTATE_RIGHT.length]; - initTextureCoordsBuffer(textureCoords, inputRotation, needFlipHorizontal, true); - if (scaleType == GLConstants.GLScaleType.CENTER_CROP) { - float distHorizontal = needRotate ? ((1 - 1 / ratioHeight) / 2) : ((1 - 1 / ratioWidth) / 2); - float distVertical = needRotate ? ((1 - 1 / ratioWidth) / 2) : ((1 - 1 / ratioHeight) / 2); - textureCoords = new float[]{ - addDistance(textureCoords[0], distHorizontal), - addDistance(textureCoords[1], distVertical), - addDistance(textureCoords[2], distHorizontal), - addDistance(textureCoords[3], distVertical), - addDistance(textureCoords[4], distHorizontal), - addDistance(textureCoords[5], distVertical), - addDistance(textureCoords[6], distHorizontal), - addDistance(textureCoords[7], distVertical),}; - } else { - cube = new float[]{cube[0] / ratioHeight, cube[1] / ratioWidth, - cube[2] / ratioHeight, cube[3] / ratioWidth, - cube[4] / ratioHeight, cube[5] / ratioWidth, - cube[6] / ratioHeight, cube[7] / ratioWidth,}; - } - return new Pair<>(cube, textureCoords); - } - - private static float addDistance(float coordinate, float distance) { - return coordinate == 0.0f ? distance : 1 - distance; - } - - /** - * Initialized texture - * - * @param textureCoords - * @param rotation - * @param flipHorizontal - * @param flipVertical - */ - public static void initTextureCoordsBuffer(float[] textureCoords, Rotation rotation, - boolean flipHorizontal, boolean flipVertical) { - float[] initRotation; - switch (rotation) { - case ROTATION_90: - initRotation = GLConstants.TEXTURE_COORDS_ROTATE_RIGHT; - break; - case ROTATION_180: - initRotation = GLConstants.TEXTURE_COORDS_ROTATED_180; - break; - case ROTATION_270: - initRotation = GLConstants.TEXTURE_COORDS_ROTATE_LEFT; - break; - case NORMAL: - default: - initRotation = GLConstants.TEXTURE_COORDS_NO_ROTATION; - break; - } - - System.arraycopy(initRotation, 0, textureCoords, 0, initRotation.length); - if (flipHorizontal) { - textureCoords[0] = flip(textureCoords[0]); - textureCoords[2] = flip(textureCoords[2]); - textureCoords[4] = flip(textureCoords[4]); - textureCoords[6] = flip(textureCoords[6]); - } - - if (flipVertical) { - textureCoords[1] = flip(textureCoords[1]); - textureCoords[3] = flip(textureCoords[3]); - textureCoords[5] = flip(textureCoords[5]); - textureCoords[7] = flip(textureCoords[7]); - } - } - - private static float flip(final float i) { - return i == 0.0f ? 1.0f : 0.0f; - } - - - public static int loadShader(final String strSource, final int iType) { - int[] compiled = new int[1]; - int iShader = GLES20.glCreateShader(iType); - GLES20.glShaderSource(iShader, strSource); - GLES20.glCompileShader(iShader); - GLES20.glGetShaderiv(iShader, GLES20.GL_COMPILE_STATUS, compiled, 0); - if (compiled[0] == 0) { - Log.w("Load Shader Failed", "Compilation\n" + GLES20.glGetShaderInfoLog(iShader)); - return 0; - } - return iShader; - } - - /** - * load program - * - * @param strVSource - * @param strFSource - * @return - */ - public static int loadProgram(final String strVSource, final String strFSource) { - int iVShader; - int iFShader; - - iVShader = loadShader(strVSource, GLES20.GL_VERTEX_SHADER); - if (iVShader == 0) { - Log.w("Load Program", "Vertex Shader Failed"); - return 0; - } - iFShader = loadShader(strFSource, GLES20.GL_FRAGMENT_SHADER); - if (iFShader == 0) { - Log.w("Load Program", "Fragment Shader Failed"); - return 0; - } - - int iProgId = GLES20.glCreateProgram(); - - GLES20.glAttachShader(iProgId, iVShader); - GLES20.glAttachShader(iProgId, iFShader); - - GLES20.glLinkProgram(iProgId); - - int[] link = new int[1]; - GLES20.glGetProgramiv(iProgId, GLES20.GL_LINK_STATUS, link, 0); - if (link[0] <= 0) { - Log.w("Load Program", "Linking Failed"); - return 0; - } - GLES20.glDeleteShader(iVShader); - GLES20.glDeleteShader(iFShader); - return iProgId; - } - - /** - * Create time watermark - * - * @param time - * @param width - * @param height - * @return - */ - public static Bitmap createTimeBitmap(long time, int width, int height) { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); - String timeStr = String.format("%s", dateFormat.format(new Date(time))); - Paint paint = new Paint(); - paint.setTextSize(40); - paint.setTextAlign(Paint.Align.LEFT); - paint.setColor(Color.RED); - paint.setAntiAlias(true); - - Paint.FontMetricsInt fm = paint.getFontMetricsInt(); - String[] arr = timeStr.split("\n"); - int maxWidth = 0; - for (String t : arr) { - maxWidth = (int) Math.max(maxWidth, paint.measureText(t)); - } - Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - for (int i = 0; i < arr.length; i++) { - canvas.drawText(arr[i], 130, (i + 1) * (fm.descent - fm.ascent) + 300, paint); - } - canvas.save(); - return bitmap; - } - - - public static void checkGlError(String op) { - if (!DEBUG) { - return; - } - - int error; - while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) { - Log.e(TAG, String.format("%s: glError %s", op, GLUtils.getEGLErrorString(error))); - } - } -} diff --git a/TRTC-Simple-Demo/android/app/src/main/java/opengl/Program.java b/TRTC-Simple-Demo/android/app/src/main/java/opengl/Program.java deleted file mode 100644 index 9d8e22a..0000000 --- a/TRTC-Simple-Demo/android/app/src/main/java/opengl/Program.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.tencent.trtc_demo.opengl; - -import android.opengl.GLES20; -import android.util.Log; - - -public class Program { - - private static final String TAG = "Program"; - private static final int INVALID_PROGRAM_ID = -1; - private final String mVertexShader; - private final String mFragmentShader; - private int mProgramId; - - public Program(String vertexShader, String fragmentShader) { - mVertexShader = vertexShader; - mFragmentShader = fragmentShader; - mProgramId = INVALID_PROGRAM_ID; - } - - /** - * Build program - */ - public void build() { - int vertexShaderId = loadShader(mVertexShader, GLES20.GL_VERTEX_SHADER); - if (vertexShaderId == 0) { - Log.e(TAG, "load vertex shader failed."); - return; - } - - int fragmentShaderId = loadShader(mFragmentShader, GLES20.GL_FRAGMENT_SHADER); - if (fragmentShaderId == 0) { - Log.e(TAG, "load fragment shader failed."); - return; - } - - int programId = GLES20.glCreateProgram(); - GLES20.glAttachShader(programId, vertexShaderId); - GLES20.glAttachShader(programId, fragmentShaderId); - GLES20.glLinkProgram(programId); - - int[] link = new int[1]; - GLES20.glGetProgramiv(programId, GLES20.GL_LINK_STATUS, link, 0); - if (link[0] <= 0) { - Log.e(TAG, "link program failed. status: " + link[0]); - return; - } - - GLES20.glDeleteShader(vertexShaderId); - GLES20.glDeleteShader(fragmentShaderId); - mProgramId = programId; - } - - public int getProgramId() { - return mProgramId; - } - - public void destroy() { - GLES20.glDeleteProgram(mProgramId); - mProgramId = INVALID_PROGRAM_ID; - } - - private int loadShader(final String strSource, final int iType) { - int[] compiled = new int[1]; - int iShader = GLES20.glCreateShader(iType); - GLES20.glShaderSource(iShader, strSource); - GLES20.glCompileShader(iShader); - GLES20.glGetShaderiv(iShader, GLES20.GL_COMPILE_STATUS, compiled, 0); - if (compiled[0] == 0) { - OpenGlUtils.checkGlError("glCompileShader"); - return 0; - } - return iShader; - } -} diff --git a/TRTC-Simple-Demo/android/app/src/main/java/opengl/Rotation.java b/TRTC-Simple-Demo/android/app/src/main/java/opengl/Rotation.java deleted file mode 100644 index f346c85..0000000 --- a/TRTC-Simple-Demo/android/app/src/main/java/opengl/Rotation.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2012 CyberAgent - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.tencent.trtc_demo.opengl; - -public enum Rotation { - NORMAL, ROTATION_90, ROTATION_180, ROTATION_270; - - /** - * Retrieves the int representation of the Rotation. - * - * @return 0, 90, 180 or 270 - */ - public int asInt() { - switch (this) { - case NORMAL: - return 0; - case ROTATION_90: - return 90; - case ROTATION_180: - return 180; - case ROTATION_270: - return 270; - default: - return 0; - } - } - - /** - * Create a Rotation from an integer. Needs to be either 0, 90, 180 or 270. - * - * @param rotation 0, 90, 180 or 270 - * @return Rotation object - */ - public static Rotation fromInt(int rotation) { - switch (rotation) { - case 0: - return NORMAL; - case 90: - return ROTATION_90; - case 180: - return ROTATION_180; - case 270: - return ROTATION_270; - case 360: - return NORMAL; - default: - return NORMAL; - } - } -} diff --git a/TRTC-Simple-Demo/android/app/src/main/java/opengl/helper/EGL10Helper.java b/TRTC-Simple-Demo/android/app/src/main/java/opengl/helper/EGL10Helper.java deleted file mode 100644 index 372181a..0000000 --- a/TRTC-Simple-Demo/android/app/src/main/java/opengl/helper/EGL10Helper.java +++ /dev/null @@ -1,167 +0,0 @@ -package com.tencent.trtc_demo.opengl.helper; - -import android.util.Log; -import android.view.Surface; - -import javax.microedition.khronos.egl.EGL10; -import javax.microedition.khronos.egl.EGLConfig; -import javax.microedition.khronos.egl.EGLContext; -import javax.microedition.khronos.egl.EGLDisplay; -import javax.microedition.khronos.egl.EGLSurface; - -public class EGL10Helper implements EGLHelper { - - private static final String TAG = "EGL10Helper"; - - public static EGL10Helper createEGLSurface(EGLConfig config, EGLContext context, Surface surface, int width, - int height) { - EGL10Helper egl = new EGL10Helper(width, height); - if (egl.initialize(config, context, surface)) { - return egl; - } else { - return null; - } - } - - private final int mWidth; - private final int mHeight; - private EGLDisplay mEGLDisplay = EGL10.EGL_NO_DISPLAY; - private EGLContext mEGLContext = EGL10.EGL_NO_CONTEXT; - private EGLSurface mEGLSurface = EGL10.EGL_NO_SURFACE; - private EGL10 mEGL; - private EGLConfig mEGLConfig; - - private EGL10Helper(int width, int height) { - mWidth = width; - mHeight = height; - } - - @Override - public boolean swapBuffers() { - boolean ret = mEGL.eglSwapBuffers(mEGLDisplay, mEGLSurface); - checkEglError(); - return ret; - } - - @Override - public void makeCurrent() { - mEGL.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext); - checkEglError(); - } - - public void destroy() { - if (mEGLDisplay != EGL10.EGL_NO_DISPLAY) { - mEGL.eglMakeCurrent(mEGLDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT); - - if (mEGLSurface != EGL10.EGL_NO_SURFACE) { - mEGL.eglDestroySurface(mEGLDisplay, mEGLSurface); - mEGLSurface = EGL10.EGL_NO_SURFACE; - } - if (mEGLContext != EGL10.EGL_NO_CONTEXT) { - mEGL.eglDestroyContext(mEGLDisplay, mEGLContext); - mEGLContext = EGL10.EGL_NO_CONTEXT; - } - mEGL.eglTerminate(mEGLDisplay); - checkEglError(); - } - mEGLDisplay = EGL10.EGL_NO_DISPLAY; - } - - public void unmakeCurrent() { - if (mEGLDisplay != EGL10.EGL_NO_DISPLAY) { - mEGL.eglMakeCurrent(mEGLDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT); - } - } - - private boolean initialize(EGLConfig config, EGLContext context, Surface surface) { - mEGL = (EGL10) EGLContext.getEGL(); - mEGLDisplay = mEGL.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); - mEGL.eglInitialize(mEGLDisplay, new int[2]); - if (config == null) { - int[] numConfig = new int[1]; - EGLConfig[] configs = new EGLConfig[1]; - int[] configAttributes = surface == null ? ATTRIBUTES_FOR_OFFSCREEN_SURFACE : ATTRIBUTES_FOR_SURFACE; - mEGL.eglChooseConfig(mEGLDisplay, configAttributes, configs, 1, numConfig); - mEGLConfig = configs[0]; - } else { - mEGLConfig = config; - } - - int version = 2; - int[] attribList = { - EGL_CONTEXT_CLIENT_VERSION, version, - EGL10.EGL_NONE - }; - - if (context == null) { - context = EGL10.EGL_NO_CONTEXT; - } - mEGLContext = mEGL.eglCreateContext(mEGLDisplay, mEGLConfig, context, attribList); - if (mEGLContext == EGL10.EGL_NO_CONTEXT) { - checkEglError(); - return false; - } - - int[] attribListPbuffer = { - EGL10.EGL_WIDTH, mWidth, - EGL10.EGL_HEIGHT, mHeight, - EGL10.EGL_NONE - }; - if (surface == null) { - mEGLSurface = mEGL.eglCreatePbufferSurface(mEGLDisplay, mEGLConfig, attribListPbuffer); - } else { - mEGLSurface = mEGL.eglCreateWindowSurface(mEGLDisplay, mEGLConfig, surface, null); - } - if (mEGLSurface == EGL10.EGL_NO_SURFACE) { - checkEglError(); - return false; - } - - if (!mEGL.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext)) { - checkEglError(); - return false; - } - return true; - } - - @Override - public EGLContext getContext() { - return mEGLContext; - } - - public void checkEglError() { - int ec = mEGL.eglGetError(); - if (ec != EGL10.EGL_SUCCESS) { - Log.e(TAG, "EGL error: 0x" + Integer.toHexString(ec)); - } - } - - private static final int EGL_RECORDABLE_ANDROID = 0x3142; - private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098; - private static final int EGL_OPENGL_ES2_BIT = 4; - - - private static final int[] ATTRIBUTES_FOR_OFFSCREEN_SURFACE = { - EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT, // The front desk shows Surface here EGL10.EGL_WINDOW_BIT - EGL10.EGL_RED_SIZE, 8, - EGL10.EGL_GREEN_SIZE, 8, - EGL10.EGL_BLUE_SIZE, 8, - EGL10.EGL_ALPHA_SIZE, 8, - EGL10.EGL_DEPTH_SIZE, 0, - EGL10.EGL_STENCIL_SIZE, 0, - EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL10.EGL_NONE - }; - private static final int[] ATTRIBUTES_FOR_SURFACE = { - EGL10.EGL_SURFACE_TYPE, EGL10.EGL_WINDOW_BIT, // The front desk shows Surface here EGL10.EGL_WINDOW_BIT - EGL10.EGL_RED_SIZE, 8, - EGL10.EGL_GREEN_SIZE, 8, - EGL10.EGL_BLUE_SIZE, 8, - EGL10.EGL_ALPHA_SIZE, 8, - EGL10.EGL_DEPTH_SIZE, 0, - EGL10.EGL_STENCIL_SIZE, 0, - EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL_RECORDABLE_ANDROID, 1, - EGL10.EGL_NONE - }; -} diff --git a/TRTC-Simple-Demo/android/app/src/main/java/opengl/helper/EGL14Helper.java b/TRTC-Simple-Demo/android/app/src/main/java/opengl/helper/EGL14Helper.java deleted file mode 100644 index 0459545..0000000 --- a/TRTC-Simple-Demo/android/app/src/main/java/opengl/helper/EGL14Helper.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.tencent.trtc_demo.opengl.helper; - -import android.annotation.TargetApi; -import android.opengl.EGL14; -import android.opengl.EGLConfig; -import android.opengl.EGLContext; -import android.opengl.EGLDisplay; -import android.opengl.EGLExt; -import android.opengl.EGLSurface; -import android.util.Log; -import android.view.Surface; - -import com.tencent.custom.customcapture.render.EGLHelper; - - -@TargetApi(17) -public class EGL14Helper implements EGLHelper { - - private static final String TAG = "EGL14Helper"; - - private static final int EGL_RECORDABLE_ANDROID = 0x3142; - private static final int GLES_VERSION = 2; - - public static EGL14Helper createEGLSurface(EGLConfig config, EGLContext context, Surface surface, int width, - int height) { - EGL14Helper egl = new EGL14Helper(width, height); - if (egl.initialize(config, context, surface)) { - return egl; - } else { - return null; - } - } - - private final int mWidth; - private final int mHeight; - private EGLConfig mEGLConfig = null; - private EGLDisplay mEGLDisplay = EGL14.EGL_NO_DISPLAY; - private EGLContext mEGLContext = EGL14.EGL_NO_CONTEXT; - private EGLSurface mEGLSurface; - - private EGL14Helper(int width, int height) { - mWidth = width; - mHeight = height; - } - - @Override - public void makeCurrent() { - if (mEGLDisplay == EGL14.EGL_NO_DISPLAY) { - // called makeCurrent() before create? - Log.d(TAG, "NOTE: makeCurrent w/o display"); - } - if (!EGL14.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext)) { - throw new RuntimeException("eglMakeCurrent failed"); - } - } - - @Override - public void destroy() { - if (mEGLDisplay != EGL14.EGL_NO_DISPLAY) { - // Android is unusual in that it uses a reference-counted EGLDisplay. So for - // every eglInitialize() we need an eglTerminate(). - EGL14.eglMakeCurrent(mEGLDisplay, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_CONTEXT); - if (mEGLSurface != EGL14.EGL_NO_SURFACE) { - EGL14.eglDestroySurface(mEGLDisplay, mEGLSurface); - mEGLSurface = EGL14.EGL_NO_SURFACE; - } - if (mEGLContext != EGL14.EGL_NO_CONTEXT) { - EGL14.eglDestroyContext(mEGLDisplay, mEGLContext); - mEGLContext = EGL14.EGL_NO_CONTEXT; - } - EGL14.eglReleaseThread(); - // TODO: 2016/10/14 for Samsumg S4, EGL14.eglReleaseThread() cause CRASH! - EGL14.eglTerminate(mEGLDisplay); - } - mEGLDisplay = EGL14.EGL_NO_DISPLAY; - } - - @Override - public boolean swapBuffers() { - return EGL14.eglSwapBuffers(mEGLDisplay, mEGLSurface); - } - - private boolean initialize(EGLConfig config, EGLContext context, Surface surface) { - mEGLDisplay = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY); - if (mEGLDisplay == EGL14.EGL_NO_DISPLAY) { - throw new RuntimeException("unable to get EGL14 display"); - } - - int[] version = new int[2]; - if (!EGL14.eglInitialize(mEGLDisplay, version, 0, version, 1)) { - mEGLDisplay = null; - throw new RuntimeException("unable to initialize EGL14"); - } - - if (config != null) { - mEGLConfig = config; - } else { - EGLConfig[] configs = new EGLConfig[1]; - int[] numConfigs = new int[1]; - int[] attribList = surface == null ? ATTRIBUTE_LIST_FOR_OFFSCREEN_SURFACE : ATTRIBUTE_LIST_FOR_SURFACE; - if (!EGL14.eglChooseConfig(mEGLDisplay, attribList, 0, configs, 0, configs.length, - numConfigs, 0)) { - return false; - } - mEGLConfig = configs[0]; - } - - if (context == null) { - context = EGL14.EGL_NO_CONTEXT; - } - int[] attribList = { - EGL14.EGL_CONTEXT_CLIENT_VERSION, GLES_VERSION, - EGL14.EGL_NONE - }; - mEGLContext = EGL14.eglCreateContext(mEGLDisplay, mEGLConfig, context, attribList, 0); - if (mEGLContext == EGL14.EGL_NO_CONTEXT) { - checkEGLError(); - return false; - } - - if (surface == null) { - int[] attribListPbuffer = { - EGL14.EGL_WIDTH, mWidth, - EGL14.EGL_HEIGHT, mHeight, - EGL14.EGL_NONE - }; - mEGLSurface = EGL14.eglCreatePbufferSurface(mEGLDisplay, mEGLConfig, attribListPbuffer, 0); - } else { - int[] surfaceAttribs = {EGL14.EGL_NONE}; - mEGLSurface = EGL14.eglCreateWindowSurface(mEGLDisplay, mEGLConfig, surface, surfaceAttribs, 0); - } - - checkEGLError(); - if (!EGL14.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext)) { - checkEGLError(); - return false; - } - return true; - } - - @Override - public void unmakeCurrent() { - if (mEGLDisplay != EGL14.EGL_NO_DISPLAY) { - EGL14.eglMakeCurrent(mEGLDisplay, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_CONTEXT); - } - } - - public void setPresentationTime(long nsecs) { - EGLExt.eglPresentationTimeANDROID(mEGLDisplay, mEGLSurface, nsecs); - } - - @Override - public EGLContext getContext() { - return mEGLContext; - } - - public EGLConfig getConfig() { - return mEGLConfig; - } - - private void checkEGLError() { - int ec = EGL14.eglGetError(); - if (ec != EGL14.EGL_SUCCESS) { - Log.e(TAG, "EGL error:" + ec); - throw new RuntimeException(": EGL error: 0x" + Integer.toHexString(ec)); - } - } - - private static final int[] ATTRIBUTE_LIST_FOR_SURFACE = { - EGL14.EGL_RED_SIZE, 8, - EGL14.EGL_GREEN_SIZE, 8, - EGL14.EGL_BLUE_SIZE, 8, - EGL14.EGL_ALPHA_SIZE, 8, - EGL14.EGL_DEPTH_SIZE, 0, - EGL14.EGL_STENCIL_SIZE, 0, - EGL14.EGL_RENDERABLE_TYPE, - GLES_VERSION == 2 ? EGL14.EGL_OPENGL_ES2_BIT : EGL14.EGL_OPENGL_ES2_BIT | EGLExt.EGL_OPENGL_ES3_BIT_KHR, - EGL_RECORDABLE_ANDROID, 1, - EGL14.EGL_NONE - }; - - private static final int[] ATTRIBUTE_LIST_FOR_OFFSCREEN_SURFACE = { - EGL14.EGL_SURFACE_TYPE, EGL14.EGL_PBUFFER_BIT,//The front desk shows Surface here Egl10.egl_window_bit - EGL14.EGL_RED_SIZE, 8, - EGL14.EGL_GREEN_SIZE, 8, - EGL14.EGL_BLUE_SIZE, 8, - EGL14.EGL_ALPHA_SIZE, 8, - EGL14.EGL_DEPTH_SIZE, 0, - EGL14.EGL_STENCIL_SIZE, 0, - EGL14.EGL_RENDERABLE_TYPE, - GLES_VERSION == 2 ? EGL14.EGL_OPENGL_ES2_BIT : EGL14.EGL_OPENGL_ES2_BIT | EGLExt.EGL_OPENGL_ES3_BIT_KHR, - EGL_RECORDABLE_ANDROID, 1, - EGL14.EGL_NONE - }; -} diff --git a/TRTC-Simple-Demo/android/app/src/main/java/opengl/helper/EGLHelper.java b/TRTC-Simple-Demo/android/app/src/main/java/opengl/helper/EGLHelper.java deleted file mode 100644 index 02b13c7..0000000 --- a/TRTC-Simple-Demo/android/app/src/main/java/opengl/helper/EGLHelper.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.tencent.trtc_demo.opengl.helper; - -/** - * Android has two sets of EGL classes. In order to facilitate use, they abstract them and only provide the following interfaces. - * - * @param - */ -public interface EGLHelper { - /** - * Return to EglContext to create shared EglContext, etc. - */ - T getContext(); - - /** - * Bind EglContext to the current thread, and Draw Surface and Read Surface saved in Helper. - */ - void makeCurrent(); - - /** - * Lift the current thread -bound EGLCONTEXT, Draw Surface, and Read Surface. - */ - void unmakeCurrent(); - - /** - * Brush the rendered content on the binding drawing target. - */ - boolean swapBuffers(); - - /** - * Destroy the created EglContext and related resources. - */ - void destroy(); -} diff --git a/TRTC-Simple-Demo/android/app/src/main/kotlin/com/example/ffi_test_example/MainActivity.kt b/TRTC-Simple-Demo/android/app/src/main/kotlin/com/example/ffi_test_example/MainActivity.kt new file mode 100644 index 0000000..cb7c2cb --- /dev/null +++ b/TRTC-Simple-Demo/android/app/src/main/kotlin/com/example/ffi_test_example/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.ffi_test_example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/TRTC-Simple-Demo/android/app/src/main/res/drawable-v21/launch_background.xml b/TRTC-Simple-Demo/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/TRTC-Simple-Demo/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/TRTC-Simple-Demo/android/app/src/main/res/values-night/styles.xml b/TRTC-Simple-Demo/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/TRTC-Simple-Demo/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/TRTC-Simple-Demo/android/app/src/main/res/values/styles.xml b/TRTC-Simple-Demo/android/app/src/main/res/values/styles.xml index 00fa441..cb1ef88 100644 --- a/TRTC-Simple-Demo/android/app/src/main/res/values/styles.xml +++ b/TRTC-Simple-Demo/android/app/src/main/res/values/styles.xml @@ -1,8 +1,18 @@ - + + diff --git a/TRTC-Simple-Demo/android/app/src/profile/AndroidManifest.xml b/TRTC-Simple-Demo/android/app/src/profile/AndroidManifest.xml index dd6c3b0..f00bb24 100644 --- a/TRTC-Simple-Demo/android/app/src/profile/AndroidManifest.xml +++ b/TRTC-Simple-Demo/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,7 @@ - diff --git a/TRTC-Simple-Demo/android/build.gradle b/TRTC-Simple-Demo/android/build.gradle index 1ef2cbe..674e96f 100644 --- a/TRTC-Simple-Demo/android/build.gradle +++ b/TRTC-Simple-Demo/android/build.gradle @@ -1,19 +1,20 @@ buildscript { + ext.kotlin_version = '1.9.0' repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.2' + classpath 'com.android.tools.build:gradle:7.2.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { google() - jcenter() - maven {url 'https://jitpack.io'} + mavenCentral() } } @@ -25,6 +26,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/TRTC-Simple-Demo/android/gradle.properties b/TRTC-Simple-Demo/android/gradle.properties index ef73a2e..94adc3a 100644 --- a/TRTC-Simple-Demo/android/gradle.properties +++ b/TRTC-Simple-Demo/android/gradle.properties @@ -1,4 +1,3 @@ org.gradle.jvmargs=-Xmx1536M -# android.enableR8=true android.useAndroidX=true android.enableJetifier=true diff --git a/TRTC-Simple-Demo/android/gradle/wrapper/gradle-wrapper.properties b/TRTC-Simple-Demo/android/gradle/wrapper/gradle-wrapper.properties index 4f89084..3c472b9 100644 --- a/TRTC-Simple-Demo/android/gradle/wrapper/gradle-wrapper.properties +++ b/TRTC-Simple-Demo/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Thu Feb 27 18:02:03 CST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/TRTC-Simple-Demo/android/local.properties b/TRTC-Simple-Demo/android/local.properties new file mode 100644 index 0000000..bd6ce9d --- /dev/null +++ b/TRTC-Simple-Demo/android/local.properties @@ -0,0 +1,2 @@ +sdk.dir=/Users/iveshe/Library/Android/sdk +flutter.sdk=/Users/iveshe/flutterSDK/flutter \ No newline at end of file diff --git a/TRTC-Simple-Demo/android/settings.gradle b/TRTC-Simple-Demo/android/settings.gradle index 5a2f14f..44e62bc 100644 --- a/TRTC-Simple-Demo/android/settings.gradle +++ b/TRTC-Simple-Demo/android/settings.gradle @@ -1,15 +1,11 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/TRTC-Simple-Demo/android/settings_aar.gradle b/TRTC-Simple-Demo/android/settings_aar.gradle deleted file mode 100644 index e7b4def..0000000 --- a/TRTC-Simple-Demo/android/settings_aar.gradle +++ /dev/null @@ -1 +0,0 @@ -include ':app' diff --git a/TRTC-Simple-Demo/ios/.gitignore b/TRTC-Simple-Demo/ios/.gitignore deleted file mode 100644 index cc5bf1c..0000000 --- a/TRTC-Simple-Demo/ios/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -**/Pods/ -**/.symlinks/ -xcuserdata -**/.generated/ -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* \ No newline at end of file diff --git a/TRTC-Simple-Demo/ios/Flutter/.last_build_id b/TRTC-Simple-Demo/ios/Flutter/.last_build_id deleted file mode 100644 index 0998a7b..0000000 --- a/TRTC-Simple-Demo/ios/Flutter/.last_build_id +++ /dev/null @@ -1 +0,0 @@ -742bc6d1de38ad1d2dd4ecdbb058d3c5 \ No newline at end of file diff --git a/TRTC-Simple-Demo/ios/Flutter/AppFrameworkInfo.plist b/TRTC-Simple-Demo/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2..9625e10 100644 --- a/TRTC-Simple-Demo/ios/Flutter/AppFrameworkInfo.plist +++ b/TRTC-Simple-Demo/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier diff --git a/TRTC-Simple-Demo/ios/Flutter/Debug.xcconfig b/TRTC-Simple-Demo/ios/Flutter/Debug.xcconfig index e8efba1..ec97fc6 100644 --- a/TRTC-Simple-Demo/ios/Flutter/Debug.xcconfig +++ b/TRTC-Simple-Demo/ios/Flutter/Debug.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/TRTC-Simple-Demo/ios/Flutter/Generated.xcconfig b/TRTC-Simple-Demo/ios/Flutter/Generated.xcconfig new file mode 100644 index 0000000..c949f5e --- /dev/null +++ b/TRTC-Simple-Demo/ios/Flutter/Generated.xcconfig @@ -0,0 +1,14 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/iveshe/flutterSDK/flutter +FLUTTER_APPLICATION_PATH=/Users/iveshe/FlutterProject/flutter_github/TRTC_Flutter/TRTC-Simple-Demo +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_TARGET=lib/main.dart +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=2.0.0 +FLUTTER_BUILD_NUMBER=2.0.0 +EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386 +EXCLUDED_ARCHS[sdk=iphoneos*]=armv7 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.dart_tool/package_config.json diff --git a/TRTC-Simple-Demo/ios/Flutter/Release.xcconfig b/TRTC-Simple-Demo/ios/Flutter/Release.xcconfig index 399e934..c4855bf 100644 --- a/TRTC-Simple-Demo/ios/Flutter/Release.xcconfig +++ b/TRTC-Simple-Demo/ios/Flutter/Release.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/TRTC-Simple-Demo/ios/Flutter/flutter_export_environment.sh b/TRTC-Simple-Demo/ios/Flutter/flutter_export_environment.sh new file mode 100755 index 0000000..98419d6 --- /dev/null +++ b/TRTC-Simple-Demo/ios/Flutter/flutter_export_environment.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/iveshe/flutterSDK/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/iveshe/FlutterProject/flutter_github/TRTC_Flutter/TRTC-Simple-Demo" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib/main.dart" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=2.0.0" +export "FLUTTER_BUILD_NUMBER=2.0.0" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/TRTC-Simple-Demo/ios/Podfile b/TRTC-Simple-Demo/ios/Podfile index 5a75dfb..2d7c590 100644 --- a/TRTC-Simple-Demo/ios/Podfile +++ b/TRTC-Simple-Demo/ios/Podfile @@ -28,17 +28,14 @@ require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelpe flutter_ios_podfile_setup target 'Runner' do - use_frameworks! + use_modular_headers! + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) end post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) - target.build_configurations.each do |config| - config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = "11.0" - end end end diff --git a/TRTC-Simple-Demo/ios/Runner.xcodeproj/project.pbxproj b/TRTC-Simple-Demo/ios/Runner.xcodeproj/project.pbxproj index 9e01512..a61c5d4 100644 --- a/TRTC-Simple-Demo/ios/Runner.xcodeproj/project.pbxproj +++ b/TRTC-Simple-Demo/ios/Runner.xcodeproj/project.pbxproj @@ -9,35 +9,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6192ED6E283F1F380027888F /* brightness.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 6192ED68283F1F380027888F /* brightness.fsh */; }; - 6192ED6F283F1F380027888F /* TRTCVideoCustomPreprocessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6192ED69283F1F380027888F /* TRTCVideoCustomPreprocessor.m */; }; - 6192ED70283F1F380027888F /* TRTCShaderCompiler.m in Sources */ = {isa = PBXBuildFile; fileRef = 6192ED6A283F1F380027888F /* TRTCShaderCompiler.m */; }; - 6192ED71283F1F380027888F /* vertexShader.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 6192ED6D283F1F380027888F /* vertexShader.vsh */; }; - 6CF86F76DC1D5F103A4828D4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D5A94714830F8743BE5A46E /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 947897649C5863D783D3BE56 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EFF6F41440C8FA8CF6670529 /* libPods-Runner.a */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B856FAB22C0EFB1D003D40DA /* TXLiteAVSDK_ReplayKitExt.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = B856FAB12C0EFB1D003D40DA /* TXLiteAVSDK_ReplayKitExt.xcframework */; }; - B8D802552BDB91D900045AB5 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2036D9325676B82006B0084 /* ReplayKit.framework */; }; - B8D802582BDB91D900045AB5 /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D802572BDB91D900045AB5 /* SampleHandler.swift */; }; - B8D8025C2BDB91D900045AB5 /* TRTC Demo Screen.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = B8D802542BDB91D900045AB5 /* TRTC Demo Screen.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - B8D802642BDB92B600045AB5 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E17C39A526EF159100C1F645 /* Accelerate.framework */; }; - B8D802652BDB92C500045AB5 /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8D8024D2BDB8DC800045AB5 /* VideoToolbox.framework */; }; - B8D802662BDB92ED00045AB5 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = E17C399F26EF154E00C1F645 /* libc++.tbd */; }; - D2036D9425676B82006B0084 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2036D9325676B82006B0084 /* ReplayKit.framework */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - B8D8025A2BDB91D900045AB5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 97C146E61CF9000F007C117D /* Project object */; - proxyType = 1; - remoteGlobalIDString = B8D802532BDB91D900045AB5; - remoteInfo = "TRTC Demo Screen"; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -49,54 +27,26 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - B8D802472BDB8D1B00045AB5 /* Embed Foundation Extensions */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 13; - files = ( - B8D8025C2BDB91D900045AB5 /* TRTC Demo Screen.appex in Embed Foundation Extensions */, - ); - name = "Embed Foundation Extensions"; - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 6192ED68283F1F380027888F /* brightness.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = brightness.fsh; sourceTree = ""; }; - 6192ED69283F1F380027888F /* TRTCVideoCustomPreprocessor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TRTCVideoCustomPreprocessor.m; sourceTree = ""; }; - 6192ED6A283F1F380027888F /* TRTCShaderCompiler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TRTCShaderCompiler.m; sourceTree = ""; }; - 6192ED6B283F1F380027888F /* TRTCVideoCustomPreprocessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TRTCVideoCustomPreprocessor.h; sourceTree = ""; }; - 6192ED6C283F1F380027888F /* TRTCShaderCompiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TRTCShaderCompiler.h; sourceTree = ""; }; - 6192ED6D283F1F380027888F /* vertexShader.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = vertexShader.vsh; sourceTree = ""; }; - 6D5A94714830F8743BE5A46E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4A3DAF98EECA5C398E795B41 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 8288D42054D5B02A5ADD2B76 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97ADDE2A6EBCF98012D0795F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA9771795B45F69477785C11 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - B856FAB12C0EFB1D003D40DA /* TXLiteAVSDK_ReplayKitExt.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = TXLiteAVSDK_ReplayKitExt.xcframework; sourceTree = ""; }; - B8D8024D2BDB8DC800045AB5 /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = System/Library/Frameworks/VideoToolbox.framework; sourceTree = SDKROOT; }; - B8D802542BDB91D900045AB5 /* TRTC Demo Screen.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "TRTC Demo Screen.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - B8D802572BDB91D900045AB5 /* SampleHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = ""; }; - B8D802592BDB91D900045AB5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D2036D9325676B82006B0084 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; }; - DAD3A0908C06832831125739 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E144EF442600B61700CDA725 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; - E17C399F26EF154E00C1F645 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; - E17C39A126EF156900C1F645 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - E17C39A326EF157A00C1F645 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; }; - E17C39A526EF159100C1F645 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - E991292179FC9C03BDF3F747 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + EFF6F41440C8FA8CF6670529 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -104,47 +54,19 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D2036D9425676B82006B0084 /* ReplayKit.framework in Frameworks */, - 6CF86F76DC1D5F103A4828D4 /* Pods_Runner.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B8D802512BDB91D900045AB5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B8D802652BDB92C500045AB5 /* VideoToolbox.framework in Frameworks */, - B8D802662BDB92ED00045AB5 /* libc++.tbd in Frameworks */, - B856FAB22C0EFB1D003D40DA /* TXLiteAVSDK_ReplayKitExt.xcframework in Frameworks */, - B8D802642BDB92B600045AB5 /* Accelerate.framework in Frameworks */, - B8D802552BDB91D900045AB5 /* ReplayKit.framework in Frameworks */, + 947897649C5863D783D3BE56 /* libPods-Runner.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 4D18229ADC5E2533A13CCDB3 /* Pods */ = { + 85B04C2FE653688A3F42B203 /* Frameworks */ = { isa = PBXGroup; children = ( - AA9771795B45F69477785C11 /* Pods-Runner.debug.xcconfig */, - E991292179FC9C03BDF3F747 /* Pods-Runner.release.xcconfig */, - DAD3A0908C06832831125739 /* Pods-Runner.profile.xcconfig */, + EFF6F41440C8FA8CF6670529 /* libPods-Runner.a */, ); - path = Pods; - sourceTree = ""; - }; - 6192ED67283F1F380027888F /* ThirdBeauty */ = { - isa = PBXGroup; - children = ( - 6192ED68283F1F380027888F /* brightness.fsh */, - 6192ED69283F1F380027888F /* TRTCVideoCustomPreprocessor.m */, - 6192ED6A283F1F380027888F /* TRTCShaderCompiler.m */, - 6192ED6B283F1F380027888F /* TRTCVideoCustomPreprocessor.h */, - 6192ED6C283F1F380027888F /* TRTCShaderCompiler.h */, - 6192ED6D283F1F380027888F /* vertexShader.vsh */, - ); - path = ThirdBeauty; + name = Frameworks; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -161,13 +83,11 @@ 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( - 6192ED67283F1F380027888F /* ThirdBeauty */, 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, - B8D802562BDB91D900045AB5 /* TRTC Demo Screen */, 97C146EF1CF9000F007C117D /* Products */, - 4D18229ADC5E2533A13CCDB3 /* Pods */, - BE34F8A1C753EC8F3DB38AE0 /* Frameworks */, + B4A195398C8FCC7E2A54D3BF /* Pods */, + 85B04C2FE653688A3F42B203 /* Frameworks */, ); sourceTree = ""; }; @@ -175,7 +95,6 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, - B8D802542BDB91D900045AB5 /* TRTC Demo Screen.appex */, ); name = Products; sourceTree = ""; @@ -183,12 +102,10 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( - E144EF442600B61700CDA725 /* Runner.entitlements */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -197,35 +114,14 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; - B8D802562BDB91D900045AB5 /* TRTC Demo Screen */ = { + B4A195398C8FCC7E2A54D3BF /* Pods */ = { isa = PBXGroup; children = ( - B8D802572BDB91D900045AB5 /* SampleHandler.swift */, - B8D802592BDB91D900045AB5 /* Info.plist */, + 8288D42054D5B02A5ADD2B76 /* Pods-Runner.debug.xcconfig */, + 97ADDE2A6EBCF98012D0795F /* Pods-Runner.release.xcconfig */, + 4A3DAF98EECA5C398E795B41 /* Pods-Runner.profile.xcconfig */, ); - path = "TRTC Demo Screen"; - sourceTree = ""; - }; - BE34F8A1C753EC8F3DB38AE0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B856FAB12C0EFB1D003D40DA /* TXLiteAVSDK_ReplayKitExt.xcframework */, - B8D8024D2BDB8DC800045AB5 /* VideoToolbox.framework */, - E17C39A526EF159100C1F645 /* Accelerate.framework */, - E17C39A326EF157A00C1F645 /* libresolv.tbd */, - E17C39A126EF156900C1F645 /* libz.tbd */, - E17C399F26EF154E00C1F645 /* libc++.tbd */, - D2036D9325676B82006B0084 /* ReplayKit.framework */, - 6D5A94714830F8743BE5A46E /* Pods_Runner.framework */, - ); - name = Frameworks; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -235,67 +131,42 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FD6DF0A0643B868A2C301F96 /* [CP] Check Pods Manifest.lock */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - B8D802472BDB8D1B00045AB5 /* Embed Foundation Extensions */, - C83EFF1A973737911F06177F /* [CP] Embed Pods Frameworks */, + F987769DB01B6E605F739E07 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 222FEC6F408CB7E67FBD7722 /* [CP] Copy Pods Resources */, + 1F29FCD80EB35C9C06289228 /* [CP] Embed Pods Frameworks */, + 13AE2BC35AF5F4641E6F6698 /* [CP] Copy Pods Resources */, ); buildRules = ( ); dependencies = ( - B8D8025B2BDB91D900045AB5 /* PBXTargetDependency */, ); name = Runner; productName = Runner; productReference = 97C146EE1CF9000F007C117D /* Runner.app */; productType = "com.apple.product-type.application"; }; - B8D802532BDB91D900045AB5 /* TRTC Demo Screen */ = { - isa = PBXNativeTarget; - buildConfigurationList = B8D8025D2BDB91D900045AB5 /* Build configuration list for PBXNativeTarget "TRTC Demo Screen" */; - buildPhases = ( - B8D802502BDB91D900045AB5 /* Sources */, - B8D802512BDB91D900045AB5 /* Frameworks */, - B8D802522BDB91D900045AB5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "TRTC Demo Screen"; - productName = "TRTC Demo Screen"; - productReference = B8D802542BDB91D900045AB5 /* TRTC Demo Screen.appex */; - productType = "com.apple.product-type.app-extension"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1520; LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; - DevelopmentTeam = F8A3GH6Q4W; LastSwiftMigration = 1100; - ProvisioningStyle = Manual; - }; - B8D802532BDB91D900045AB5 = { - CreatedOnToolsVersion = 15.2; }; }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -308,7 +179,6 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, - B8D802532BDB91D900045AB5 /* TRTC Demo Screen */, ); }; /* End PBXProject section */ @@ -321,93 +191,78 @@ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 6192ED6E283F1F380027888F /* brightness.fsh in Resources */, - 6192ED71283F1F380027888F /* vertexShader.vsh in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - B8D802522BDB91D900045AB5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 222FEC6F408CB7E67FBD7722 /* [CP] Copy Pods Resources */ = { + 13AE2BC35AF5F4641E6F6698 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", - "${PODS_ROOT}/TXLiteAVSDK_Professional/TXLiteAVSDK_Professional/TXLiteAVSDK_Professional.xcframework/ios-arm64_armv7/TXLiteAVSDK_Professional.framework/TXLiteAVSDK_Professional.bundle", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TXLiteAVSDK_Professional.bundle", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1F29FCD80EB35C9C06289228 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - C83EFF1A973737911F06177F /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/path_provider_foundation/path_provider_foundation.framework", - "${BUILT_PRODUCTS_DIR}/replay_kit_launcher/replay_kit_launcher.framework", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/TXLiteAVSDK_Professional/Professional/TXSoundTouch.framework/TXSoundTouch", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/TXLiteAVSDK_Professional/Professional/TXFFmpeg.framework/TXFFmpeg", ); - name = "[CP] Embed Pods Frameworks"; + name = "Run Script"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_foundation.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/replay_kit_launcher.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TXSoundTouch.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TXFFmpeg.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - FD6DF0A0643B868A2C301F96 /* [CP] Check Pods Manifest.lock */ = { + F987769DB01B6E605F739E07 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -437,30 +292,12 @@ buildActionMask = 2147483647; files = ( 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 6192ED6F283F1F380027888F /* TRTCVideoCustomPreprocessor.m in Sources */, - 6192ED70283F1F380027888F /* TRTCShaderCompiler.m in Sources */, 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - B8D802502BDB91D900045AB5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B8D802582BDB91D900045AB5 /* SampleHandler.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - B8D8025B2BDB91D900045AB5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = B8D802532BDB91D900045AB5 /* TRTC Demo Screen */; - targetProxy = B8D8025A2BDB91D900045AB5 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -504,7 +341,6 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -536,36 +372,18 @@ isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = FN2V63AD2J; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = BSAPB3K3R7; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - MARKETING_VERSION = 1.0.2; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.tencent.tuikit.tuicallkit.test.demo; + PRODUCT_BUNDLE_IDENTIFIER = com.example.ffiTestExample; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = com.tencent.comm.trtc.demo_Development_SignProvision; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "TUICallkit Voip Test Profile"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; @@ -595,7 +413,6 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -620,7 +437,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -651,7 +468,6 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -670,11 +486,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -684,37 +501,21 @@ isa = XCBuildConfiguration; baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = FN2V63AD2J; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = F8A3GH6Q4W; + DEVELOPMENT_TEAM = YD6UQ8H9R9; ENABLE_BITCODE = NO; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 i386"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - MARKETING_VERSION = 1.0.2; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "com.-"; + PRODUCT_BUNDLE_IDENTIFIER = com.example.ffiTestExample; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = com.tencent.comm.trtc.demo_Development_SignProvision; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = abyWildcardDev; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -726,170 +527,24 @@ isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; DEVELOPMENT_TEAM = FN2V63AD2J; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = F8A3GH6Q4W; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - MARKETING_VERSION = 1.0.2; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "com.-"; + PRODUCT_BUNDLE_IDENTIFIER = com.example.ffiTestExample; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = com.tencent.comm.trtc.demo_Development_SignProvision; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = abyWildcardDev; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; }; - B8D8025E2BDB91D900045AB5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = F8A3GH6Q4W; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "TRTC Demo Screen/Info.plist"; - INFOPLIST_KEY_CFBundleDisplayName = "TRTC Demo Screen"; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.2; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 1.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.-.myexetension"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = abyWildcardDev; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - B8D8025F2BDB91D900045AB5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = F8A3GH6Q4W; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "TRTC Demo Screen/Info.plist"; - INFOPLIST_KEY_CFBundleDisplayName = "TRTC Demo Screen"; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.2; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 1.0; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "com.-.myexetension"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = abyWildcardDev; - SKIP_INSTALL = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - B8D802602BDB91D900045AB5 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; - CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=iphoneos*]" = HKB8WPFBR9; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "TRTC Demo Screen/Info.plist"; - INFOPLIST_KEY_CFBundleDisplayName = "TRTC Demo Screen"; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.2; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 1.0; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = f; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = _InHouse; - SKIP_INSTALL = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Profile; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -913,16 +568,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B8D8025D2BDB91D900045AB5 /* Build configuration list for PBXNativeTarget "TRTC Demo Screen" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B8D8025E2BDB91D900045AB5 /* Debug */, - B8D8025F2BDB91D900045AB5 /* Release */, - B8D802602BDB91D900045AB5 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = 97C146E61CF9000F007C117D /* Project object */; diff --git a/TRTC-Simple-Demo/ios/Runner/AppDelegate.swift b/TRTC-Simple-Demo/ios/Runner/AppDelegate.swift index 7b200d4..70693e4 100644 --- a/TRTC-Simple-Demo/ios/Runner/AppDelegate.swift +++ b/TRTC-Simple-Demo/ios/Runner/AppDelegate.swift @@ -1,8 +1,5 @@ import UIKit import Flutter -import TXLiteAVSDK_Professional -import tencent_trtc_cloud -import TXCustomBeautyProcesserPlugin @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { @@ -11,39 +8,6 @@ import TXCustomBeautyProcesserPlugin didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { GeneratedPluginRegistrant.register(with: self) - lazy var customBeautyInstance: TRTCVideoCustomPreprocessor = { - let customBeautyInstance = TRTCVideoCustomPreprocessor() - customBeautyInstance.brightness = 0.5 - return customBeautyInstance - }() - - TencentTRTCCloud.register(customBeautyProcesserFactory: customBeautyInstance) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } } - -extension TRTCVideoCustomPreprocessor: ITXCustomBeautyProcesserFactory { - public func createCustomBeautyProcesser() -> ITXCustomBeautyProcesser { - return self - } - - public func destroyCustomBeautyProcesser() { - invalidateBindedTexture() - } -} - -extension TRTCVideoCustomPreprocessor: ITXCustomBeautyProcesser { - public func getSupportedPixelFormat() -> ITXCustomBeautyPixelFormat { - return .Texture2D - } - - public func getSupportedBufferType() -> ITXCustomBeautyBufferType { - return .Texture - } - - public func onProcessVideoFrame(srcFrame: ITXCustomBeautyVideoFrame, dstFrame: ITXCustomBeautyVideoFrame) -> ITXCustomBeautyVideoFrame { - let outPutTextureId = processTexture(srcFrame.textureId, width: UInt32(srcFrame.width), height: UInt32(srcFrame.height)) - dstFrame.textureId = outPutTextureId - return dstFrame - } -} diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf0..7353c41 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd9..797d452 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b..6ed2d93 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde121..4cd7b00 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e..fe73094 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc230..321773c 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd9..797d452 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8..502f463 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b86..0ec3034 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b86..0ec3034 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d16..e9f5fea 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d..84ac32a 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41..8953cba 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f58..0467bf1 100644 Binary files a/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/TRTC-Simple-Demo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/TRTC-Simple-Demo/ios/Runner/GeneratedPluginRegistrant.m b/TRTC-Simple-Demo/ios/Runner/GeneratedPluginRegistrant.m index d8a2913..8a96ae2 100644 --- a/TRTC-Simple-Demo/ios/Runner/GeneratedPluginRegistrant.m +++ b/TRTC-Simple-Demo/ios/Runner/GeneratedPluginRegistrant.m @@ -6,37 +6,37 @@ #import "GeneratedPluginRegistrant.h" -#if __has_include() -#import +#if __has_include() +#import #else -@import path_provider_foundation; +@import audioplayers_darwin; #endif -#if __has_include() -#import +#if __has_include() +#import #else -@import permission_handler; +@import path_provider_foundation; #endif -#if __has_include() -#import +#if __has_include() +#import #else -@import replay_kit_launcher; +@import permission_handler_apple; #endif -#if __has_include() -#import +#if __has_include() +#import #else -@import tencent_trtc_cloud; +@import tencent_rtc_sdk; #endif @implementation GeneratedPluginRegistrant + (void)registerWithRegistry:(NSObject*)registry { + [AudioplayersDarwinPlugin registerWithRegistrar:[registry registrarForPlugin:@"AudioplayersDarwinPlugin"]]; [PathProviderPlugin registerWithRegistrar:[registry registrarForPlugin:@"PathProviderPlugin"]]; [PermissionHandlerPlugin registerWithRegistrar:[registry registrarForPlugin:@"PermissionHandlerPlugin"]]; - [ReplayKitLauncherPlugin registerWithRegistrar:[registry registrarForPlugin:@"ReplayKitLauncherPlugin"]]; - [TencentTRTCCloud registerWithRegistrar:[registry registrarForPlugin:@"TencentTRTCCloud"]]; + [TencentRTCCloud registerWithRegistrar:[registry registrarForPlugin:@"TencentRTCCloud"]]; } @end diff --git a/TRTC-Simple-Demo/ios/Runner/Info.plist b/TRTC-Simple-Demo/ios/Runner/Info.plist index ecb0543..8ebe1ee 100644 --- a/TRTC-Simple-Demo/ios/Runner/Info.plist +++ b/TRTC-Simple-Demo/ios/Runner/Info.plist @@ -2,10 +2,14 @@ - CADisableMinimumFrameDurationOnPhone - + NSMicrophoneUsageDescription + aaaaa + NSCameraUsageDescription + aaaaa CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Ffi Test CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -13,25 +17,17 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - trtc_demo + ffi_test_example CFBundlePackageType APPL CFBundleShortVersionString - $(MARKETING_VERSION) + $(FLUTTER_BUILD_NAME) CFBundleSignature ???? CFBundleVersion $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS - NSCameraUsageDescription - The authorized camera permissions can the video call normally - NSMicrophoneUsageDescription - Authorized Macing's rights to speak normally - NSPhotoLibraryUsageDescription - The app requires your consent to access the album - UIFileSharingEnabled - YES UILaunchStoryboardName LaunchScreen UIMainStoryboardFile @@ -50,8 +46,10 @@ UIInterfaceOrientationLandscapeRight UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone - io.flutter.embedded_views_preview + UIApplicationSupportsIndirectInputEvents diff --git a/TRTC-Simple-Demo/ios/Runner/Runner-Bridging-Header.h b/TRTC-Simple-Demo/ios/Runner/Runner-Bridging-Header.h index b818b22..308a2a5 100644 --- a/TRTC-Simple-Demo/ios/Runner/Runner-Bridging-Header.h +++ b/TRTC-Simple-Demo/ios/Runner/Runner-Bridging-Header.h @@ -1,2 +1 @@ #import "GeneratedPluginRegistrant.h" -#import "TRTCVideoCustomPreprocessor.h" diff --git a/TRTC-Simple-Demo/ios/Runner/Runner.entitlements b/TRTC-Simple-Demo/ios/Runner/Runner.entitlements deleted file mode 100644 index 0c67376..0000000 --- a/TRTC-Simple-Demo/ios/Runner/Runner.entitlements +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/TRTC-Simple-Demo/ios/TRTC Demo Screen/Info.plist b/TRTC-Simple-Demo/ios/TRTC Demo Screen/Info.plist deleted file mode 100644 index e936790..0000000 --- a/TRTC-Simple-Demo/ios/TRTC Demo Screen/Info.plist +++ /dev/null @@ -1,15 +0,0 @@ - - - - - NSExtension - - NSExtensionPointIdentifier - com.apple.broadcast-services-upload - NSExtensionPrincipalClass - $(PRODUCT_MODULE_NAME).SampleHandler - RPBroadcastProcessMode - RPBroadcastProcessModeSampleBuffer - - - diff --git a/TRTC-Simple-Demo/ios/TRTC Demo Screen/SampleHandler.swift b/TRTC-Simple-Demo/ios/TRTC Demo Screen/SampleHandler.swift deleted file mode 100644 index 410fb2e..0000000 --- a/TRTC-Simple-Demo/ios/TRTC Demo Screen/SampleHandler.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// SampleHandler.swift -// TXReplayKit_SimpleDemo -// -// Created by J J on 2020/6/10. -// Copyright © 2020 Tencent. All rights reserved. -// - -import ReplayKit -import TXLiteAVSDK_ReplayKitExt - - -let APPGROUP = "group.com.tencent.comm.trtc.demo" - -class SampleHandler: RPBroadcastSampleHandler, TXReplayKitExtDelegate { - - let recordScreenKey = Notification.Name.init("TRTCRecordScreenKey") - - override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) { - // User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional. - TXReplayKitExt.sharedInstance().setup(withAppGroup: APPGROUP, delegate: self) - } - - override func broadcastPaused() { - // User has requested to pause the broadcast. Samples will stop being delivered. - } - - override func broadcastResumed() { - // User has requested to resume the broadcast. Samples delivery will resume. - } - - override func broadcastFinished() { - // User has requested to finish the broadcast. - TXReplayKitExt.sharedInstance() .broadcastFinished() - } - - func broadcastFinished(_ broadcast: TXReplayKitExt, reason: TXReplayKitExtReason) { - var tip = "" - switch reason { - case TXReplayKitExtReason.requestedByMain: - tip = "Screen sharing is over" - break - case TXReplayKitExtReason.disconnected: - tip = "Disconnect" - break - case TXReplayKitExtReason.versionMismatch: - tip = "Integrated error (SDK version number does not match)" - break - default: - break - } - - let error = NSError(domain: NSStringFromClass(self.classForCoder), code: 0, userInfo: [NSLocalizedFailureReasonErrorKey:tip]) - finishBroadcastWithError(error) - } - - override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) { - switch sampleBufferType { - case RPSampleBufferType.video: - // Handle video sample buffer - TXReplayKitExt.sharedInstance() .sendVideoSampleBuffer(sampleBuffer) - break - case RPSampleBufferType.audioApp: - // Handle audio sample buffer for app audio - break - case RPSampleBufferType.audioMic: - // Handle audio sample buffer for mic audio - break - @unknown default: - // Handle other sample buffer types - fatalError("Unknown type of sample buffer") - } - } -} diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/Info.plist b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/Info.plist deleted file mode 100644 index 90f072b..0000000 --- a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/Info.plist +++ /dev/null @@ -1,41 +0,0 @@ - - - - - AvailableLibraries - - - LibraryIdentifier - ios-arm64_armv7 - LibraryPath - TXLiteAVSDK_ReplayKitExt.framework - SupportedArchitectures - - arm64 - armv7 - - SupportedPlatform - ios - - - LibraryIdentifier - ios-arm64_x86_64-simulator - LibraryPath - TXLiteAVSDK_ReplayKitExt.framework - SupportedArchitectures - - arm64 - x86_64 - - SupportedPlatform - ios - SupportedPlatformVariant - simulator - - - CFBundlePackageType - XFWK - XCFrameworkFormatVersion - 1.0 - - diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXLiteAVSDK_ReplayKitExt.h b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXLiteAVSDK_ReplayKitExt.h deleted file mode 100644 index cfcd1a2..0000000 --- a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXLiteAVSDK_ReplayKitExt.h +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Copyright (c) 2024 Tencent. All Rights Reserved. - * - */ - -#import diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXReplayKitExt.h b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXReplayKitExt.h deleted file mode 100644 index 6b43932..0000000 --- a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXReplayKitExt.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Module: TXReplayKitExt @ TXLiteAVSDK - * - * Function: 腾讯云 ReplayKit 录屏功能在Extension中的主要接口类 - * - * Version: <:Version:> - */ - -/// @defgroup TXReplayKitExt_ios TXReplayKitExt -/// 腾讯云 ReplayKit 录屏功能在Extension中的主要接口类 -/// @{ - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, TXReplayKitExtReason) { - /// 主进程请求结束 - TXReplayKitExtReasonRequestedByMain, - /// 链接断开,主进程退出 - TXReplayKitExtReasonDisconnected, - /// 版本号与主进程SDK不符 - TXReplayKitExtReasonVersionMismatch -}; - -@protocol TXReplayKitExtDelegate; - -/// 屏幕分享主入口类 -API_AVAILABLE(ios(11.0)) -__attribute__((visibility("default"))) @interface TXReplayKitExt : NSObject - -/// 获取单例 -+ (instancetype)sharedInstance; - -/// 初始化方法 -/// -/// 需要在 RPBroadcastSampleHandler 的实现类中的 broadcastStartedWithSetupInfo 方法中调用 -/// @param appGroup App group ID -/// @param delegate 回调对象 -- (void)setupWithAppGroup:(NSString *)appGroup delegate:(id)delegate; - -/// 录屏暂停方法 -/// -/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastPaused,在 broadcastPaused -/// 方法中调用 -- (void)broadcastPaused; - -/// 录屏恢复方法 -/// -/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastResumed,在 -/// broadcastResumed 方法中调用 -- (void)broadcastResumed; - -/// 录屏完成方法 -/// -/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastFinished,在 -/// broadcastFinished 方法中调用 -- (void)broadcastFinished; - -/// 媒体数据(音视频)发送方法 -/// -/// 需要在 RPBroadcastSampleHandler 的实现类中的 processSampleBuffer: 方法中调用 -/// -/// @param sampleBuffer 系统回调的视频或音频帧 -/// @param sampleBufferType 媒体输入类型 -/// @note -/// - sampleBufferType 当前支持 RPSampleBufferTypeVideo 和 RPSampleBufferTypeAudioApp -/// 类型的数据帧处理。 -/// - RPSampleBufferTypeAudioMic 不支持,请在主 app 处理麦克风采集数据 -- (void)sendSampleBuffer:(CMSampleBufferRef)sampleBuffer - withType:(RPSampleBufferType)sampleBufferType; - -/// 视频发送方法 -/// 已废弃,请使用 - (void)sendSampleBuffer:(CMSampleBufferRef)sampleBuffer -/// withType:(RPSampleBufferType)sampleBufferType; 代替 需要在 RPBroadcastSampleHandler 的实现类中的 -/// processSampleBuffer: 方法中调用 -/// -/// @param sampleBuffer 系统回调的视频帧 -- (void)sendVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer - __attribute__((deprecated("use sendSampleBuffer:withType instead"))); - -@end - -API_AVAILABLE(ios(11.0)) -@protocol TXReplayKitExtDelegate - -/// 录屏完成回调 -/// -/// @param broadcast 发出回调的实例 -/// @param reason 结束原因代码, 参见 TXReplayKitExtReason -- (void)broadcastFinished:(TXReplayKitExt *)broadcast reason:(TXReplayKitExtReason)reason; - -@end - -NS_ASSUME_NONNULL_END -/// @} diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Info.plist b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Info.plist deleted file mode 100644 index 73c1378..0000000 --- a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Info.plist +++ /dev/null @@ -1,55 +0,0 @@ - - - - - BuildMachineOSBuild - 21G83 - CFBundleDevelopmentRegion - en - CFBundleExecutable - TXLiteAVSDK_ReplayKitExt - CFBundleIdentifier - com.tencent.TXLiteAVSDK.ReplayKitExt - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - TXLiteAVSDK_ReplayKitExt - CFBundlePackageType - FMWK - CFBundleShortVersionString - 11.8.15687 - CFBundleSignature - ???? - CFBundleSupportedPlatforms - - iPhoneOS - - CFBundleVersion - 1.0 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 19F64 - DTPlatformName - iphoneos - DTPlatformVersion - 15.5 - DTSDKBuild - 19F64 - DTSDKName - iphoneos15.5 - DTXcode - 1341 - DTXcodeBuild - 13F100 - MinimumOSVersion - 9.0 - NSPrincipalClass - - UIDeviceFamily - - 1 - 2 - - - diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Modules/module.modulemap b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Modules/module.modulemap deleted file mode 100644 index 45b32e1..0000000 --- a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module TXLiteAVSDK_ReplayKitExt { - umbrella header "TXLiteAVSDK_ReplayKitExt.h" - - export * - module * { export * } -} diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt deleted file mode 100644 index 6db03d1..0000000 Binary files a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt and /dev/null differ diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt.bundle/PrivacyInfo.xcprivacy b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt.bundle/PrivacyInfo.xcprivacy deleted file mode 100644 index 134be20..0000000 --- a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_armv7/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt.bundle/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,48 +0,0 @@ - - - - - NSPrivacyTracking - - NSPrivacyTrackingDomains - - NSPrivacyCollectedDataTypes - - - NSPrivacyCollectedDataType - NSPrivacyCollectedDataTypePhotosorVideos - NSPrivacyCollectedDataTypeLinked - - NSPrivacyCollectedDataTypeTracking - - NSPrivacyCollectedDataTypePurposes - - NSPrivacyCollectedDataTypePurposeAppFunctionality - - - - NSPrivacyCollectedDataType - NSPrivacyCollectedDataTypeAudioData - NSPrivacyCollectedDataTypeLinked - - NSPrivacyCollectedDataTypeTracking - - NSPrivacyCollectedDataTypePurposes - - NSPrivacyCollectedDataTypePurposeAppFunctionality - - - - NSPrivacyAccessedAPITypes - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategorySystemBootTime - NSPrivacyAccessedAPITypeReasons - - 35F9.1 - - - - - diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXLiteAVSDK_ReplayKitExt.h b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXLiteAVSDK_ReplayKitExt.h deleted file mode 100644 index cfcd1a2..0000000 --- a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXLiteAVSDK_ReplayKitExt.h +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Copyright (c) 2024 Tencent. All Rights Reserved. - * - */ - -#import diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXReplayKitExt.h b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXReplayKitExt.h deleted file mode 100644 index 6b43932..0000000 --- a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Headers/TXReplayKitExt.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Module: TXReplayKitExt @ TXLiteAVSDK - * - * Function: 腾讯云 ReplayKit 录屏功能在Extension中的主要接口类 - * - * Version: <:Version:> - */ - -/// @defgroup TXReplayKitExt_ios TXReplayKitExt -/// 腾讯云 ReplayKit 录屏功能在Extension中的主要接口类 -/// @{ - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, TXReplayKitExtReason) { - /// 主进程请求结束 - TXReplayKitExtReasonRequestedByMain, - /// 链接断开,主进程退出 - TXReplayKitExtReasonDisconnected, - /// 版本号与主进程SDK不符 - TXReplayKitExtReasonVersionMismatch -}; - -@protocol TXReplayKitExtDelegate; - -/// 屏幕分享主入口类 -API_AVAILABLE(ios(11.0)) -__attribute__((visibility("default"))) @interface TXReplayKitExt : NSObject - -/// 获取单例 -+ (instancetype)sharedInstance; - -/// 初始化方法 -/// -/// 需要在 RPBroadcastSampleHandler 的实现类中的 broadcastStartedWithSetupInfo 方法中调用 -/// @param appGroup App group ID -/// @param delegate 回调对象 -- (void)setupWithAppGroup:(NSString *)appGroup delegate:(id)delegate; - -/// 录屏暂停方法 -/// -/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastPaused,在 broadcastPaused -/// 方法中调用 -- (void)broadcastPaused; - -/// 录屏恢复方法 -/// -/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastResumed,在 -/// broadcastResumed 方法中调用 -- (void)broadcastResumed; - -/// 录屏完成方法 -/// -/// 通过系统控制中心停止录屏时,会回调 RPBroadcastSampleHandler.broadcastFinished,在 -/// broadcastFinished 方法中调用 -- (void)broadcastFinished; - -/// 媒体数据(音视频)发送方法 -/// -/// 需要在 RPBroadcastSampleHandler 的实现类中的 processSampleBuffer: 方法中调用 -/// -/// @param sampleBuffer 系统回调的视频或音频帧 -/// @param sampleBufferType 媒体输入类型 -/// @note -/// - sampleBufferType 当前支持 RPSampleBufferTypeVideo 和 RPSampleBufferTypeAudioApp -/// 类型的数据帧处理。 -/// - RPSampleBufferTypeAudioMic 不支持,请在主 app 处理麦克风采集数据 -- (void)sendSampleBuffer:(CMSampleBufferRef)sampleBuffer - withType:(RPSampleBufferType)sampleBufferType; - -/// 视频发送方法 -/// 已废弃,请使用 - (void)sendSampleBuffer:(CMSampleBufferRef)sampleBuffer -/// withType:(RPSampleBufferType)sampleBufferType; 代替 需要在 RPBroadcastSampleHandler 的实现类中的 -/// processSampleBuffer: 方法中调用 -/// -/// @param sampleBuffer 系统回调的视频帧 -- (void)sendVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer - __attribute__((deprecated("use sendSampleBuffer:withType instead"))); - -@end - -API_AVAILABLE(ios(11.0)) -@protocol TXReplayKitExtDelegate - -/// 录屏完成回调 -/// -/// @param broadcast 发出回调的实例 -/// @param reason 结束原因代码, 参见 TXReplayKitExtReason -- (void)broadcastFinished:(TXReplayKitExt *)broadcast reason:(TXReplayKitExtReason)reason; - -@end - -NS_ASSUME_NONNULL_END -/// @} diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Info.plist b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Info.plist deleted file mode 100644 index cf522d9..0000000 --- a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Info.plist +++ /dev/null @@ -1,55 +0,0 @@ - - - - - BuildMachineOSBuild - 21G83 - CFBundleDevelopmentRegion - en - CFBundleExecutable - TXLiteAVSDK_ReplayKitExt - CFBundleIdentifier - com.tencent.TXLiteAVSDK.ReplayKitExt - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - TXLiteAVSDK_ReplayKitExt - CFBundlePackageType - FMWK - CFBundleShortVersionString - 11.8.15687 - CFBundleSignature - ???? - CFBundleSupportedPlatforms - - iPhoneSimulator - - CFBundleVersion - 1.0 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - - DTPlatformName - iphonesimulator - DTPlatformVersion - 15.5 - DTSDKBuild - 19F64 - DTSDKName - iphonesimulator15.5 - DTXcode - 1341 - DTXcodeBuild - 13F100 - MinimumOSVersion - 9.0 - NSPrincipalClass - - UIDeviceFamily - - 1 - 2 - - - diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Modules/module.modulemap b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Modules/module.modulemap deleted file mode 100644 index 45b32e1..0000000 --- a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module TXLiteAVSDK_ReplayKitExt { - umbrella header "TXLiteAVSDK_ReplayKitExt.h" - - export * - module * { export * } -} diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt deleted file mode 100644 index 472d8f5..0000000 Binary files a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt and /dev/null differ diff --git a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt.bundle/PrivacyInfo.xcprivacy b/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt.bundle/PrivacyInfo.xcprivacy deleted file mode 100644 index 134be20..0000000 --- a/TRTC-Simple-Demo/ios/TXLiteAVSDK_ReplayKitExt.xcframework/ios-arm64_x86_64-simulator/TXLiteAVSDK_ReplayKitExt.framework/TXLiteAVSDK_ReplayKitExt.bundle/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,48 +0,0 @@ - - - - - NSPrivacyTracking - - NSPrivacyTrackingDomains - - NSPrivacyCollectedDataTypes - - - NSPrivacyCollectedDataType - NSPrivacyCollectedDataTypePhotosorVideos - NSPrivacyCollectedDataTypeLinked - - NSPrivacyCollectedDataTypeTracking - - NSPrivacyCollectedDataTypePurposes - - NSPrivacyCollectedDataTypePurposeAppFunctionality - - - - NSPrivacyCollectedDataType - NSPrivacyCollectedDataTypeAudioData - NSPrivacyCollectedDataTypeLinked - - NSPrivacyCollectedDataTypeTracking - - NSPrivacyCollectedDataTypePurposes - - NSPrivacyCollectedDataTypePurposeAppFunctionality - - - - NSPrivacyAccessedAPITypes - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategorySystemBootTime - NSPrivacyAccessedAPITypeReasons - - 35F9.1 - - - - - diff --git a/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCShaderCompiler.h b/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCShaderCompiler.h deleted file mode 100644 index 91ce2cd..0000000 --- a/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCShaderCompiler.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// TRTCShaderCompiler.h -// TXLiteAVDemo -// -// Created by LiuXiaoya on 2020/11/5. -// Copyright © 2020 Tencent. All rights reserved. -// - -#import -#import - -@interface TRTCShaderCompiler : NSObject - -- (instancetype)initWithVertexShader:(NSString *)vertexShader fragmentShader:(NSString *)fragmentShader; - -- (void)prepareToDraw; - -- (GLuint)uniformIndex:(NSString *)uniformName; - -- (GLuint)attributeIndex:(NSString *)attributeName; - -@end diff --git a/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCShaderCompiler.m b/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCShaderCompiler.m deleted file mode 100644 index d2d38ea..0000000 --- a/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCShaderCompiler.m +++ /dev/null @@ -1,88 +0,0 @@ -// -// TRTCShaderCompiler.m -// TXLiteAVDemo -// -// Created by LiuXiaoya on 2020/11/5. -// Copyright © 2020 Tencent. All rights reserved. -// - -#import "TRTCShaderCompiler.h" - -@interface TRTCShaderCompiler () - -@property (nonatomic) GLuint programHandle; - -@end - -@implementation TRTCShaderCompiler - -- (instancetype)initWithVertexShader:(NSString *)vertexShader fragmentShader:(NSString *)fragmentShader { - if (self = [super init]) { - [self compileVertexShader:vertexShader fragmentShader:fragmentShader]; - } - - return self; -} - -- (void)prepareToDraw { - glUseProgram(self.programHandle); -} - -#pragma mark - Private Method - -- (GLuint)compileShader:(NSString *)shaderName withType:(GLenum)shaderType { - NSString *path = [[NSBundle mainBundle] pathForResource:shaderName ofType:nil]; - NSError *error = nil; - NSString *shaderString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; - if (!shaderString) { - NSLog(@"%@", error.localizedDescription); - } - - const char *shaderUTF8 = [shaderString UTF8String]; - GLint shaderLength = (GLint)[shaderString length]; - GLuint shaderHandle = glCreateShader(shaderType); - glShaderSource(shaderHandle, 1, &shaderUTF8, &shaderLength); - glCompileShader(shaderHandle); - - GLint compileSuccess; - glGetShaderiv(shaderHandle, GL_COMPILE_STATUS, &compileSuccess); - if (compileSuccess == GL_FALSE) { - GLchar message[256]; - glGetShaderInfoLog(shaderHandle, sizeof(message), 0, &message[0]); - NSString *messageString = [NSString stringWithUTF8String:message]; - NSLog(@"%@", messageString); - exit(1); - } - return shaderHandle; -} - -- (void)compileVertexShader:(NSString *)vertexShader fragmentShader:(NSString *)fragmentShader { - GLuint vertexShaderName = [self compileShader:vertexShader withType:GL_VERTEX_SHADER]; - GLuint fragmenShaderName = [self compileShader:fragmentShader withType:GL_FRAGMENT_SHADER]; - - self.programHandle = glCreateProgram(); - glAttachShader(self.programHandle, vertexShaderName); - glAttachShader(self.programHandle, fragmenShaderName); - - glLinkProgram(self.programHandle); - - GLint linkSuccess; - glGetProgramiv(self.programHandle, GL_LINK_STATUS, &linkSuccess); - if (linkSuccess == GL_FALSE) { - GLchar messages[256]; - glGetProgramInfoLog(self.programHandle, sizeof(messages), 0, &messages[0]); - NSString *messageString = [NSString stringWithUTF8String:messages]; - NSLog(@"%@", messageString); - exit(1); - } -} - -- (GLuint)uniformIndex:(NSString *)uniformName { - return glGetUniformLocation(self.programHandle, [uniformName UTF8String]); -} - -- (GLuint)attributeIndex:(NSString *)attributeName { - return glGetAttribLocation(self.programHandle, [attributeName UTF8String]); -} - -@end diff --git a/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCVideoCustomPreprocessor.h b/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCVideoCustomPreprocessor.h deleted file mode 100644 index 937a4d6..0000000 --- a/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCVideoCustomPreprocessor.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// TRTCVideoCustomPreprocessor.h -// TXLiteAVDemo -// -// Created by LiuXiaoya on 2020/11/5. -// Copyright © 2020 Tencent. All rights reserved. -// - -#import -#import -#import "TRTCCloudDef.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface TRTCVideoCustomPreprocessor : NSObject - -@property(nonatomic) float brightness; - -- (void)invalidateBindedTexture; - -- (GLuint)processTexture:(GLuint)textureId width:(uint32_t)width height:(uint32_t)height; - -- (void)processFrame:(TRTCVideoFrame *)srcFrame dstFrame:(TRTCVideoFrame *)dstFrame; - -@end - -NS_ASSUME_NONNULL_END diff --git a/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCVideoCustomPreprocessor.m b/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCVideoCustomPreprocessor.m deleted file mode 100644 index 9b0fbbf..0000000 --- a/TRTC-Simple-Demo/ios/ThirdBeauty/TRTCVideoCustomPreprocessor.m +++ /dev/null @@ -1,158 +0,0 @@ -// -// TRTCVideoCustomPreprocessor.m -// TXLiteAVDemo -// -// Created by LiuXiaoya on 2020/11/5. -// Copyright © 2020 Tencent. All rights reserved. -// - -#import "TRTCVideoCustomPreprocessor.h" -#import "TRTCShaderCompiler.h" -#import - -@interface TRTCVideoCustomPreprocessor() - -@property (nonatomic) BOOL isTextureValid; -@property (nonatomic) uint32_t width; -@property (nonatomic) uint32_t height; - -@property (nonatomic) GLuint brightnessUniform; -@property (nonatomic) GLuint brightnessPositionSlot; -@property (nonatomic) GLuint brightnessTextureSlot; -@property (nonatomic) GLuint brightnessTextureCoordSlot; - -@property (nonatomic) GLuint brightnessFramebuffer; -@property (nonatomic) GLuint brightnessTexture; -@property (nonatomic, strong) TRTCShaderCompiler *brightnessShader; - -@end - - -@implementation TRTCVideoCustomPreprocessor - -- (void)processFrame:(TRTCVideoFrame *)srcFrame dstFrame:(TRTCVideoFrame *)dstFrame { - if ([self needToCreateBufferWithWidth:srcFrame.width height:srcFrame.height]) { - [self createFrameBufferWithFrame:dstFrame]; - [self createShader]; - } - - [self drawTexture:srcFrame.textureId width:srcFrame.width height:srcFrame.height]; -} - -- (GLuint)processTexture:(GLuint)textureId width:(uint32_t)width height:(uint32_t)height { - if ([self needToCreateBufferWithWidth:width height:height]) { - [self createFrameBufferWithWidth:width height:height]; - [self createShader]; - } - - [self drawTexture:textureId width:width height:height]; - return self.brightnessTexture; -} - -- (void)invalidateBindedTexture { - self.isTextureValid = NO; -} - -#pragma mark - Private - -- (BOOL)needToCreateBufferWithWidth:(uint32_t)width height:(uint32_t)height { - return self.brightnessFramebuffer == 0 || self.width != width || self.height != height || !self.isTextureValid; -} - -- (void)createFrameBufferWithFrame:(TRTCVideoFrame *)frame { - glGenFramebuffers(1, &_brightnessFramebuffer); - glBindFramebuffer(GL_FRAMEBUFFER, _brightnessFramebuffer); - - glBindTexture(GL_TEXTURE_2D, frame.textureId); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, frame.textureId, 0); - - GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); - if (status != GL_FRAMEBUFFER_COMPLETE) { - NSLog(@"Error - failed to create framebuffer: %x", status); - } - - self.width = frame.width; - self.height = frame.height; - self.isTextureValid = YES; - - glBindFramebuffer(GL_FRAMEBUFFER, 0); - glBindTexture(GL_TEXTURE, 0); -} - -- (void)createFrameBufferWithWidth:(uint32_t)width height:(uint32_t)height { - glGenFramebuffers(1, &_brightnessFramebuffer); - glBindFramebuffer(GL_FRAMEBUFFER, _brightnessFramebuffer); - - glGenTextures(1, &_brightnessTexture); - glBindTexture(GL_TEXTURE_2D, _brightnessTexture); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _brightnessTexture, 0); - - GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); - if (status != GL_FRAMEBUFFER_COMPLETE) { - NSLog(@"Error - failed to create framebuffer: %x", status); - } - - self.width = width; - self.height = height; - self.isTextureValid = YES; - - glBindFramebuffer(GL_FRAMEBUFFER, 0); - glBindTexture(GL_TEXTURE, 0); -} - -- (void)createShader { - self.brightnessShader = [[TRTCShaderCompiler alloc] initWithVertexShader:@"vertexShader.vsh" fragmentShader:@"brightness.fsh"]; - [self.brightnessShader prepareToDraw]; - self.brightnessPositionSlot = [self.brightnessShader attributeIndex:@"a_Position"]; - self.brightnessTextureSlot = [self.brightnessShader uniformIndex:@"u_Texture"]; - self.brightnessTextureCoordSlot = [self.brightnessShader attributeIndex:@"a_TexCoordIn"]; - self.brightnessUniform = [self.brightnessShader uniformIndex:@"brightness"]; -} - -- (void)drawTexture:(GLuint)textureId width:(uint32_t)width height:(uint32_t)height { - glBindFramebuffer(GL_FRAMEBUFFER, _brightnessFramebuffer); - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT); - glViewport(0, 0, width, height); - - [self.brightnessShader prepareToDraw]; - glUniform1f(self.brightnessUniform, self.brightness); - glActiveTexture(GL_TEXTURE5); - glBindTexture(GL_TEXTURE_2D, textureId); - glUniform1i(self.brightnessTextureSlot, 5); - - const GLfloat vertices[] = { - -1.0f, -1.0f, - 1.0f, -1.0f, - -1.0f, 1.0f, - 1.0f, 1.0f - }; - - glEnableVertexAttribArray(self.brightnessPositionSlot); - glVertexAttribPointer(self.brightnessPositionSlot, 2, GL_FLOAT, GL_FALSE, 0, vertices); - - const GLfloat coords[] = { - 0.0f, 0.0f, - 1.0f, 0.0f, - 0.0f, 1.0f, - 1.0f, 1.0f, - }; - - glEnableVertexAttribArray(self.brightnessTextureCoordSlot); - glVertexAttribPointer(self.brightnessTextureCoordSlot, 2, GL_FLOAT, GL_FALSE, 0, coords); - - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); -} - -@end diff --git a/TRTC-Simple-Demo/ios/ThirdBeauty/brightness.fsh b/TRTC-Simple-Demo/ios/ThirdBeauty/brightness.fsh deleted file mode 100755 index b473203..0000000 --- a/TRTC-Simple-Demo/ios/ThirdBeauty/brightness.fsh +++ /dev/null @@ -1,9 +0,0 @@ -uniform sampler2D u_Texture; -varying highp vec2 v_TexCoordOut; -uniform lowp float brightness; - -void main() -{ - lowp vec4 textureColor = texture2D(u_Texture, v_TexCoordOut); - gl_FragColor = vec4((textureColor.rgb + vec3(brightness)), textureColor.w); -} diff --git a/TRTC-Simple-Demo/ios/ThirdBeauty/vertexShader.vsh b/TRTC-Simple-Demo/ios/ThirdBeauty/vertexShader.vsh deleted file mode 100644 index db65d49..0000000 --- a/TRTC-Simple-Demo/ios/ThirdBeauty/vertexShader.vsh +++ /dev/null @@ -1,8 +0,0 @@ -attribute vec4 a_Position; -attribute vec2 a_TexCoordIn; -varying vec2 v_TexCoordOut; - -void main(void) { - gl_Position = a_Position; - v_TexCoordOut = a_TexCoordIn; -} diff --git a/TRTC-Simple-Demo/lib/debug/GenerateTestUserSig.dart b/TRTC-Simple-Demo/lib/debug/GenerateTestUserSig.dart index db0d090..c262846 100644 --- a/TRTC-Simple-Demo/lib/debug/GenerateTestUserSig.dart +++ b/TRTC-Simple-Demo/lib/debug/GenerateTestUserSig.dart @@ -52,10 +52,10 @@ class GenerateTestUserSig { static String secretKey = ''; static genTestSig(String userId) { - if (kIsWeb) { - return JsGenerateTestUserSig() - .jsGenTestUserSig(sdkAppId, secretKey, userId, expireTime); - } + // if (kIsWeb) { + // return JsGenerateTestUserSig() + // .jsGenTestUserSig(sdkAppId, secretKey, userId, expireTime); + // } int currTime = _getCurrentTime(); String sig = ''; Map sigDoc = new Map(); diff --git a/TRTC-Simple-Demo/lib/debug/JsGenerateTestUserSig.dart b/TRTC-Simple-Demo/lib/debug/JsGenerateTestUserSig.dart index 5fa584b..4c384c4 100644 --- a/TRTC-Simple-Demo/lib/debug/JsGenerateTestUserSig.dart +++ b/TRTC-Simple-Demo/lib/debug/JsGenerateTestUserSig.dart @@ -1,12 +1,12 @@ -import 'package:tencent_trtc_cloud/web/Simulation_js.dart' - if (dart.library.html) 'package:js/js.dart'; - -/// @nodoc -// ignore: missing_js_lib_annotation -@JS('JsGenerateTestUserSig') -class JsGenerateTestUserSig { - external JsGenerateTestUserSig(); - external constructor(); - // ignore: non_constant_identifier_names - external String jsGenTestUserSig(SDKAPPID, SECRETKEY, userID, expireTime); -} +// import 'package:tencent_rtc_sdk/web/Simulation_js.dart' +// if (dart.library.html) 'package:js/js.dart'; +// +// /// @nodoc +// // ignore: missing_js_lib_annotation +// @JS('JsGenerateTestUserSig') +// class JsGenerateTestUserSig { +// external JsGenerateTestUserSig(); +// external constructor(); +// // ignore: non_constant_identifier_names +// external String jsGenTestUserSig(SDKAPPID, SECRETKEY, userID, expireTime); +// } diff --git a/TRTC-Simple-Demo/lib/main.dart b/TRTC-Simple-Demo/lib/main.dart index 567a512..139d4f8 100644 --- a/TRTC-Simple-Demo/lib/main.dart +++ b/TRTC-Simple-Demo/lib/main.dart @@ -1,19 +1,13 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; import 'package:trtc_demo/ui/login.dart'; import 'package:trtc_demo/ui/meeting.dart'; import 'package:trtc_demo/ui/member_list.dart'; import 'package:trtc_demo/ui/test/test_api.dart'; import 'package:trtc_demo/models/meeting_model.dart'; -import 'package:trtc_demo/ui/test/test_web.dart'; void main() { - WidgetsFlutterBinding.ensureInitialized(); - SystemChrome.setPreferredOrientations( - [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]).then((_) { - runApp(MyApp()); - }); + runApp(MyApp()); } class MyApp extends StatefulWidget { @@ -33,7 +27,6 @@ class _MyAppState extends State { "/meeting": (context) => MeetingPage(), "/memberList": (context) => MemberListPage(), "/test": (context) => TestPage(), - "/testweb": (context) => TestWebPage() }, ), ); diff --git a/TRTC-Simple-Demo/lib/models/data_models.dart b/TRTC-Simple-Demo/lib/models/data_models.dart index fc330a8..95cf346 100644 --- a/TRTC-Simple-Demo/lib/models/data_models.dart +++ b/TRTC-Simple-Demo/lib/models/data_models.dart @@ -9,6 +9,6 @@ class WidgetSize { enum BeautyType { smooth, nature, - pitu, + white, ruddy, } \ No newline at end of file diff --git a/TRTC-Simple-Demo/lib/models/meeting_model.dart b/TRTC-Simple-Demo/lib/models/meeting_model.dart index b3a8ced..ff32e11 100644 --- a/TRTC-Simple-Demo/lib/models/meeting_model.dart +++ b/TRTC-Simple-Demo/lib/models/meeting_model.dart @@ -1,7 +1,7 @@ import 'dart:collection'; import 'package:flutter/foundation.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; import 'package:trtc_demo/models/data_models.dart'; import 'package:trtc_demo/models/user_model.dart'; @@ -9,15 +9,15 @@ class MeetingModel extends ChangeNotifier { /// Internal, private state of the cart. int? _meetId; bool _isTextureRendering = false; - int _quality = TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT; + TRTCAudioQuality _quality = TRTCAudioQuality.defaultMode; late UserModel _userInfo; List _userList = []; Map _beautyInfo = { - BeautyType.smooth : 6, - BeautyType.nature : 6, - BeautyType.pitu : 6, + BeautyType.smooth : 0, + BeautyType.nature : 0, + BeautyType.white : 0, BeautyType.ruddy : 0 }; @@ -32,20 +32,20 @@ class MeetingModel extends ChangeNotifier { required bool enabledCamera, required bool enabledMicrophone, required bool enableTextureRendering, - int? quality = null}) { + TRTCAudioQuality quality = TRTCAudioQuality.defaultMode}) { _meetId = meetId; _userInfo = UserModel(userId: userId); _userInfo.isOpenCamera = enabledCamera; _userInfo.isOpenMic = enabledMicrophone; _isTextureRendering = enableTextureRendering; - _quality = quality ?? TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT; + _quality = quality; } int? getMeetId() { return _meetId; } - int getQuality() { + TRTCAudioQuality getQuality() { return _quality; } diff --git a/TRTC-Simple-Demo/lib/ui/login.dart b/TRTC-Simple-Demo/lib/ui/login.dart index 6450d37..c5ae193 100644 --- a/TRTC-Simple-Demo/lib/ui/login.dart +++ b/TRTC-Simple-Demo/lib/ui/login.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:trtc_demo/debug/GenerateTestUserSig.dart'; import 'package:trtc_demo/models/meeting_model.dart'; @@ -28,12 +28,12 @@ class LoginPageState extends State { bool _enabledCamera = true; /// whether turn on the microphone - bool _enabledMicrophone = true; + bool _enabledMicrophone = false; bool _enableTextureRendering = false; /// sound quality selection - int _quality = TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH; + TRTCAudioQuality _quality = TRTCAudioQuality.speech; final _meetIdFocusNode = FocusNode(); final _userFocusNode = FocusNode(); @@ -104,15 +104,18 @@ class LoginPageState extends State { return; } _unFocus(); - if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) { + if (!kIsWeb && !Platform.isMacOS && !Platform.isIOS) { if (!(await Permission.camera.request().isGranted) || - !(await Permission.microphone.request().isGranted) || - !(await Permission.storage.request().isGranted)) { + !(await Permission.microphone.request().isGranted) ) { MeetingTool.toast( 'You need to obtain audio and video permission to enter', context); return; } + await Permission.storage.request(); + await Permission.systemAlertWindow.request(); } + + var meetModel = context.read(); meetModel.setUserSettings( meetId: int.parse(_meetId), diff --git a/TRTC-Simple-Demo/lib/ui/meeting.dart b/TRTC-Simple-Demo/lib/ui/meeting.dart index 87cc84e..dfb5869 100644 --- a/TRTC-Simple-Demo/lib/ui/meeting.dart +++ b/TRTC-Simple-Demo/lib/ui/meeting.dart @@ -8,18 +8,15 @@ import 'package:trtc_demo/models/data_models.dart'; import 'package:trtc_demo/models/user_model.dart'; import 'package:trtc_demo/utils/tool.dart'; import 'package:trtc_demo/ui/settings.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_video_view.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/tx_beauty_manager.dart'; -import 'package:tencent_trtc_cloud/tx_device_manager.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/tx_device_manager.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; import 'package:trtc_demo/ui/login.dart'; import 'package:trtc_demo/models/meeting_model.dart'; import 'package:trtc_demo/debug/GenerateTestUserSig.dart'; import 'package:provider/provider.dart'; -import 'package:trtc_demo/ui/window_dialog.dart'; -import 'package:replay_kit_launcher/replay_kit_launcher.dart'; const iosAppGroup = 'group.com.tencent.comm.trtc.demo'; const iosExtensionName = 'TRTC Demo Screen'; @@ -34,45 +31,253 @@ class MeetingPageState extends State with WidgetsBindingObserver { final _scaffoldKey = GlobalKey(); late MeetingModel _meetModel; - BeautyType _curBeauty = BeautyType.pitu; - late TRTCCloud _trtcCloud; late TXDeviceManager _txDeviceManager; - late TXBeautyManager _txBeautyManager; - List _userList = []; List _screenUserList = []; + BeautyType _beautyType = BeautyType.white; + + late TRTCCloudListener _listener; + + int _logShowLevel = 0; + + _printLog(int level, String msg) { + if (level > _logShowLevel) { + debugPrint(msg); + } + } + + TRTCCloudListener getListener() { + return TRTCCloudListener( + onError: (errCode, errMsg) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onError errCode:$errCode errMsg:$errMsg"); + + _showErrorDialog(errMsg); + }, + onWarning: (warningCode, warningMsg) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onWarning warningCode:$warningCode warningMsg:$warningMsg"); + }, + onEnterRoom: (result) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onEnterRoom result:$result"); + + if (result > 0) { + MeetingTool.toast('Enter room success', context); + } + }, + onExitRoom: (reason) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onExitRoom reason:$reason"); + + if (reason > 0) { + MeetingTool.toast('Exit room success', context); + } + }, + onSwitchRole: (errCode, errMsg) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onSwitchRole errCode:$errCode errMsg:$errMsg"); + }, + onSwitchRoom: (errCode, errMsg) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onSwitchRoom errCode:$errCode errMsg:$errMsg"); + }, + onConnectOtherRoom: (userId, errCode, errMsg) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onConnectOtherRoom userId:$userId errCode:$errCode errMsg:$errMsg"); + }, + onDisconnectOtherRoom: (errCode, errMsg) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onDisconnectOtherRoom errCode:$errCode errMsg:$errMsg"); + }, + onRemoteUserEnterRoom: (userId) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onRemoteUserEnterRoom userId:$userId"); + + _handleOnRemoteUserEnterRoom(userId); + }, + onRemoteUserLeaveRoom: (userId, reason) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onRemoteUserLeaveRoom userId:$userId reason:$reason"); + + _handleOnRemoteUserLeaveRoom(userId); + }, + onUserVideoAvailable: (userId, available) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onUserVideoAvailable userId:$userId available:$available"); + + _handleOnUserVideoAvailable(userId, available); + }, + onUserSubStreamAvailable: (userId, available) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onUserSubStreamAvailable userId:$userId available:$available"); + + _handleOnUserSubStreamAvailable(userId, available); + }, + onUserAudioAvailable: (userId, available) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onUserAudioAvailable userId:$userId available:$available"); + + _handleOnUserAudioAvailable(userId, available); + }, + onFirstVideoFrame: (userId, streamType, width, height) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onFirstVideoFrame userId:$userId streamType:$streamType width:$width height:$height"); + }, + onFirstAudioFrame: (userId) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onFirstAudioFrame userId:$userId"); + }, + onSendFirstLocalVideoFrame: (streamType) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onSendFirstLocalVideoFrame streamType:$streamType"); + }, + onSendFirstLocalAudioFrame: () { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onSendFirstLocalAudioFrame"); + }, + onRemoteVideoStatusUpdated: (userId, streamType, status, reason) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onRemoteVideoStatusUpdated userId:$userId streamType:$streamType status:$status reason:$reason"); + }, + onRemoteAudioStatusUpdated: (userId, status, reason) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onRemoteAudioStatusUpdated userId:$userId status:$status reason:$reason"); + }, + onUserVideoSizeChanged: (userId, streamType, newWidth, newHeight) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onUserVideoSizeChanged userId:$userId streamType:$streamType newWidth:$newWidth newHeight:$newHeight"); + }, + onNetworkQuality: (localQuality, remoteQuality) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onNetworkQuality localQuality userId:${localQuality.userId} quality:${localQuality.quality}"); + + for (TRTCQualityInfo info in remoteQuality) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onNetworkQuality remoteQuality userId:${info.userId} quality:${info.quality}"); + } + }, + onStatistics: (statistics) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onStatistics " + "appCu:${statistics.appCpu} systemCu:${statistics.systemCpu} upLoss:${statistics.upLoss} " + "downLoss:${statistics.downLoss} rtt:${statistics.rtt} gatewayRtt:${statistics.gatewayRtt} " + "sendBytes:${statistics.sentBytes} receiveBytes:${statistics.receivedBytes}"); + + for (TRTCLocalStatistics info in statistics.localStatisticsArray!) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onStatistics width:${info.width} height:${info.height} frameRate:${info.frameRate} \n" + " onStatistics videoBitrate:${info.videoBitrate} audioSampleRate:${info.audioSampleRate} audioBitrate:${info.audioBitrate} \n" + " onStatistics streamType:${info.streamType} audioCaptureState:${info.audioCaptureState}"); + } + + for (TRTCRemoteStatistics info in statistics.remoteStatisticsArray!) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onStatistics userId:${info.userId} audioPacketLoss:${info.audioPacketLoss} videoPacketLoss:${info.videoPacketLoss} \n" + " onStatistics width:${info.width} height:${info.height} frameRate:${info.frameRate} videoBitrate:${info.videoBitrate} audioSampleRate:${info.audioSampleRate} \n" + " onStatistics audioBitrate:${info.audioBitrate} jitterBufferDelay:${info.jitterBufferDelay} point2PointDelay:${info.point2PointDelay} audioTotalBlockTime:${info.audioTotalBlockTime} \n" + " onStatistics audioBlockRate:${info.audioBlockRate} videoTotalBlockTime:${info.videoTotalBlockTime} videoBlockRate:${info.videoBlockRate} finalLoss:${info.finalLoss} remoteNetworkUplinkLoss:${info.remoteNetworkUplinkLoss} \n" + " onStatistics remoteNetworkRTT:${info.remoteNetworkRTT} streamType:${info.streamType}"); + } + }, + onSpeedTestResult: (result) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onSpeedTestResult TRTCSpeedTestResult: success:${result.success} errMsg:${result.errMsg} ip:${result.ip} \n" + " onSpeedTestResult quality:${result.quality} upLostRate:${result.upLostRate} downLostRate:${result.downLostRate} rtt:${result.rtt} \n" + " onSpeedTestResult availableUpBandwidth:${result.availableUpBandwidth} availableDownBandwidth:${result.availableDownBandwidth} upJitter:${result.upJitter} downJitter:${result.downJitter}\n"); + }, + onConnectionLost: () { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onConnectionLost"); + }, + onTryToReconnect: () { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onTryToReconnect"); + }, + onConnectionRecovery: () { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onConnectionRecovery"); + }, + onCameraDidReady: () { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onCameraDidReady"); + }, + onMicDidReady: () { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onMicDidReady"); + }, + onUserVoiceVolume: (userVolumes, totalVolume) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onUserVoiceVolume totalVolume:$totalVolume"); + + for (TRTCVolumeInfo info in userVolumes) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onUserVoiceVolume userId:${info.userId} volume:${info.volume}"); + } + }, + onAudioDeviceCaptureVolumeChanged: (volume, muted) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onAudioDeviceCaptureVolumeChanged volume:$volume muted:$muted"); + }, + onAudioDevicePlayoutVolumeChanged: (volume, muted) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onAudioDevicePlayoutVolumeChanged volume:$volume muted:$muted"); + }, + onSystemAudioLoopbackError: (errCode) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onSystemAudioLoopbackError errCode:$errCode"); + }, + onTestMicVolume: (volume) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onTestMicVolume volume:$volume"); + }, + onTestSpeakerVolume: (volume) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onTestSpeakerVolume volume:$volume"); + }, + onRecvCustomCmdMsg: (userId, cmdId, seq, message) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onRecvCustomCmdMsg userId:$userId cmdId:$cmdId seq:$seq message:$message"); + + MeetingTool.toast(message, context); + }, + onMissCustomCmdMsg: (userId, cmdId, errCode, missed) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onMissCustomCmdMsg userId:$userId cmdId:$cmdId errCode:$errCode missed:$missed"); + }, + onRecvSEIMsg: (userId, message) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onRecvSEIMsg userId:$userId message:$message"); + + MeetingTool.toast(message, context); + }, + onStartPublishMediaStream: (taskId, errCode, errMsg, extraInfo) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onStartPublishMediaStream taskId:$taskId errCode:$errCode errMsg:$errMsg extraInfo:$extraInfo"); + }, + onUpdatePublishMediaStream: (taskId, errCode, errMsg, extraInfo) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onUpdatePublishMediaStream taskId:$taskId errCode:$errCode errMsg:$errMsg extraInfo:$extraInfo"); + }, + onStopPublishMediaStream: (taskId, errCode, errMsg, extraInfo) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onStopPublishMediaStream taskId:$taskId errCode:$errCode errMsg:$errMsg extraInfo:$extraInfo"); + }, + onCdnStreamStateChanged: (cdnUrl, status, errCode, errMsg, extraInfo) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onCdnStreamStateChanged cdnUrl:$cdnUrl status:$status errCode:$errCode errMsg:$errMsg extraInfo:$extraInfo"); + }, + onScreenCaptureStarted: () { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onScreenCaptureStarted"); + }, + onScreenCapturePaused: (reason) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onScreenCapturePaused reason:$reason"); + }, + onScreenCaptureResumed: (reason) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onScreenCaptureResumed reason:$reason"); + }, + onScreenCaptureStopped: (reason) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onScreenCaptureStopped reason:$reason"); + }, + onScreenCaptureCovered: () { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onScreenCaptureCovered"); + }, + onLocalRecordBegin: (errCode, storagePath) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onLocalRecordBegin errCode:$errCode storagePath:$storagePath"); + }, + onLocalRecording: (duration, storagePath) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onLocalRecording duration:$duration storagePath:$storagePath"); + }, + onLocalRecordFragment: (storagePath) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onLocalRecordingFragment storagePath:$storagePath"); + }, + onLocalRecordComplete: (errCode, storagePath) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onLocalRecordComplete errCode:$errCode storagePath:$storagePath"); + }, + onSnapshotComplete: (userId, type, data, length, width, height, format) { + _printLog(1, "TRTCCloudExample TRTCCloudListenerparseCallbackParam onSnapshotComplete userId:$userId type:$type data:$data length:$length width:$width height:$height format:$format"); + }, + ); + } + @override initState() { super.initState(); - WidgetsBinding.instance.addObserver(this); + WidgetsBinding.instance!.addObserver(this); _meetModel = context.read(); _initRoom(); } _initRoom() async { // Create TRTCCloud singleton - _trtcCloud = (await TRTCCloud.sharedInstance())!; + _trtcCloud = await TRTCCloud.sharedInstance(); // Tencent Cloud Audio Effect Management Module _txDeviceManager = _trtcCloud.getDeviceManager(); - // Beauty filter and animated effect parameter management - _txBeautyManager = _trtcCloud.getBeautyManager(); - // Tencent Cloud Audio Effect Management Module - // Register event callback - _trtcCloud.registerListener(_onRtcListener); - // trtcCloud.setVideoEncoderParam(TRTCVideoEncParam( - // videoResolution: TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_480, - // videoResolutionMode: TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT)); - + _listener = getListener(); + _trtcCloud.registerListener(_listener); // Enter the room _enterRoom(); - _initData(); - - //Set beauty effect - _txBeautyManager.setBeautyStyle(TRTCCloudDef.TRTC_BEAUTY_STYLE_NATURE); - _txBeautyManager.setBeautyLevel(6); + WidgetsBinding.instance.addPostFrameCallback((_) { + _initData(); + }); } @override @@ -100,31 +305,29 @@ class MeetingPageState extends State with WidgetsBindingObserver { break; case AppLifecycleState.detached: break; - case AppLifecycleState.hidden: - break; } } // Enter the trtc room - _enterRoom() async { + _enterRoom() { try { _meetModel.getUserInfo().userSig = - await GenerateTestUserSig.genTestSig(_meetModel.getUserInfo().userId); + GenerateTestUserSig.genTestSig(_meetModel.getUserInfo().userId); } catch (err) { _meetModel.getUserInfo().userSig = ''; print(err); } - await _trtcCloud.enterRoom( + _trtcCloud.enterRoom( TRTCParams( sdkAppId: GenerateTestUserSig.sdkAppId, userId: _meetModel.getUserInfo().userId, userSig: _meetModel.getUserInfo().userSig ?? '', - role: TRTCCloudDef.TRTCRoleAnchor, + role: TRTCRoleType.anchor, roomId: _meetModel.getMeetId()!), - TRTCCloudDef.TRTC_APP_SCENE_LIVE); + TRTCAppScene.live); } - _initData() async { + _initData() { _userList.add(_meetModel.getUserInfo()); if (_meetModel.getUserInfo().isOpenMic) { if (kIsWeb) { @@ -132,167 +335,133 @@ class MeetingPageState extends State with WidgetsBindingObserver { _trtcCloud.startLocalAudio(_meetModel.getQuality()); }); } else { - await _trtcCloud.startLocalAudio(_meetModel.getQuality()); + _trtcCloud.startLocalAudio(_meetModel.getQuality()); } } _screenUserList = MeetingTool.getScreenList(_userList); + _meetModel.setList(_userList); - this.setState(() {}); + setState(() {}); } - _destoryRoom() { - _trtcCloud.unRegisterListener(_onRtcListener); + _destroyRoom() { _trtcCloud.exitRoom(); + _trtcCloud.unRegisterListener(_listener); TRTCCloud.destroySharedInstance(); } @override dispose() { - WidgetsBinding.instance.removeObserver(this); - _destoryRoom(); + WidgetsBinding.instance!.removeObserver(this); + _destroyRoom(); super.dispose(); } - /// Event callbacks - _onRtcListener(type, param) async { - if (type == TRTCCloudListener.onError) { - if (param['errCode'] == -1308) { - MeetingTool.toast('Failed to start screen recording', context); - await _trtcCloud.stopScreenCapture(); - _userList[0].isOpenCamera = true; - _meetModel.getUserInfo().isShowingWindow = false; - this.setState(() {}); - _trtcCloud.startLocalPreview( - _meetModel.getUserInfo().isFrontCamera, _meetModel.getUserInfo().localViewId); - } else { - _showErrordDialog(param['errMsg']); - } - } - if (type == TRTCCloudListener.onEnterRoom) { - if (param > 0) { - MeetingTool.toast('Enter room success', context); + _handleOnRemoteUserEnterRoom(param) { + UserModel user = UserModel(userId: param); + user.type = 'video'; + user.isOpenCamera = false; + user.size = WidgetSize(width: 0, height: 0); + _userList.add(user); + + _screenUserList = MeetingTool.getScreenList(_userList); + this.setState(() {}); + _meetModel.setList(_userList); + } + + _handleOnRemoteUserLeaveRoom(String userId) { + for (var i = 0; i < _userList.length; i++) { + if (_userList[i].userId == userId) { + _userList.removeAt(i); } } - if (type == TRTCCloudListener.onAudioRouteChanged) { - print("TRTCCloudListener onAudioRouteChanged route:${param['route']}, fromRoute:${param['fromRoute']}"); - } - if (type == TRTCCloudListener.onDeviceChange) { - print("TRTCCloudListener onDeviceChange deviceId:${param['deviceId']}, type:${param['type']}, state:${param['state']}"); - } - if (type == TRTCCloudListener.onExitRoom) { - if (param > 0) { - MeetingTool.toast('Exit room success', context); + _screenUserList = MeetingTool.getScreenList(_userList); + this.setState(() {}); + _meetModel.setList(_userList); + } + + _handleOnUserAudioAvailable(String userId, bool available) { + for (var i = 0; i < _userList.length; i++) { + if (_userList[i].userId == userId) { + _userList[i].isOpenMic = available; } } - // Remote user entry - if (type == TRTCCloudListener.onRemoteUserEnterRoom) { - UserModel user = UserModel(userId: param); - user.type = 'video'; - user.isOpenCamera = false; - user.size = WidgetSize(width: 0, height: 0); - _userList.add(user); + } - _screenUserList = MeetingTool.getScreenList(_userList); - this.setState(() {}); - _meetModel.setList(_userList); - } - // Remote user leaves room - if (type == TRTCCloudListener.onRemoteUserLeaveRoom) { - String userId = param['userId']; + _handleOnUserVideoAvailable(String userId, bool available) { + if (available) { for (var i = 0; i < _userList.length; i++) { - if (_userList[i].userId == userId) { - _userList.removeAt(i); + if (_userList[i].userId == userId && _userList[i].type == 'video') { + _userList[i].isOpenCamera = true; } } - _screenUserList = MeetingTool.getScreenList(_userList); - this.setState(() {}); - _meetModel.setList(_userList); - } - if (type == TRTCCloudListener.onUserAudioAvailable) { - String userId = param['userId']; - + } else { for (var i = 0; i < _userList.length; i++) { - if (_userList[i].userId == userId) { - _userList[i].isOpenMic = param['available']; + if (_userList[i].userId == userId && _userList[i].type == 'video') { + _trtcCloud.stopRemoteView( + userId, TRTCVideoStreamType.big); + _userList[i].isOpenCamera = false; } } } - if (type == TRTCCloudListener.onUserVideoAvailable) { - String userId = param['userId']; - - if (param['available']) { - for (var i = 0; i < _userList.length; i++) { - if (_userList[i].userId == userId && _userList[i].type == 'video') { - _userList[i].isOpenCamera = true; - } - } - } else { - for (var i = 0; i < _userList.length; i++) { - if (_userList[i].userId == userId && _userList[i].type == 'video') { - _trtcCloud.stopRemoteView( - userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG); - _userList[i].isOpenCamera = false; - } - } - } - _screenUserList = MeetingTool.getScreenList(_userList); - this.setState(() {}); - _meetModel.setList(_userList); - } + _screenUserList = MeetingTool.getScreenList(_userList); + this.setState(() {}); + _meetModel.setList(_userList); + } - if (type == TRTCCloudListener.onUserSubStreamAvailable) { - String userId = param["userId"]; - if (param["available"]) { - UserModel user = UserModel(userId: userId); - user.type = 'subStream'; - user.isOpenCamera = true; - user.size = WidgetSize(width: 0, height: 0); - _userList.add(user); - } else { - for (var i = 0; i < _userList.length; i++) { - if (_userList[i].userId == userId && - _userList[i].type == 'subStream') { - _trtcCloud.stopRemoteView( - userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB); - _userList.removeAt(i); - } + _handleOnUserSubStreamAvailable(String userId, bool available) { + if (available) { + UserModel user = UserModel(userId: userId); + user.type = 'subStream'; + user.isOpenCamera = true; + user.size = WidgetSize(width: 0, height: 0); + _userList.add(user); + } else { + for (var i = 0; i < _userList.length; i++) { + if (_userList[i].userId == userId && + _userList[i].type == 'subStream') { + _trtcCloud.stopRemoteView( + userId, TRTCVideoStreamType.sub); + _userList.removeAt(i); } } - _screenUserList = MeetingTool.getScreenList(_userList); - this.setState(() {}); - _meetModel.setList(_userList); } + _screenUserList = MeetingTool.getScreenList(_userList); + _meetModel.setList(_userList); + this.setState(() {}); + } - if (type == TRTCCloudListener.onMusicObserverStart) { - print('TRTCCloudListener onMusicObserverStart id:${param['id']} errCode:${param['errCode']}'); - } - if (type == TRTCCloudListener.onMusicObserverPlayProgress) { - print('TRTCCloudListener onMusicObserverPlayProgress id:${param['id']} curPtsMS:${param['curPtsMS']} durationMS:${param['durationMS']}'); - } - if (type == TRTCCloudListener.onMusicObserverComplete) { - print('TRTCCloudListener onMusicObserverComplete id:${param['id']} errCode:${param['errCode']}'); - } + _startShare(int viewId) { + _trtcCloud.startScreenCapture( + viewId, + TRTCVideoStreamType.sub, + TRTCVideoEncParam( + videoFps: 10, + videoResolution: TRTCVideoResolution.res_1280_720, + videoBitrate: 1600, + videoResolutionMode: TRTCVideoResolutionMode.portrait, + )); + } - if (type == TRTCCloudListener.onRecvCustomCmdMsg) { - print('TRTCCloudListener onRecvCustomCmdMsg userId:${param['userId']} cmdID:${param['cmdID']} seq:${param['seq']} message:${param['message']}'); - } - if (type == TRTCCloudListener.onMissCustomCmdMsg) { - print('TRTCCloudListener onMissCustomCmdMsg userId:${param['userId']} cmdID:${param['cmdID']} errCode:${param['errCode']} missed:${param['missed']}'); - } - if (type == TRTCCloudListener.onRecvSEIMsg) { - print('TRTCCloudListener onRecvSEIMsg userId:${param['userId']} message:${param['message']}'); - } - if (type == TRTCCloudListener.onLocalRecordBegin) { - print('TRTCCloudListener onLocalRecordBegin errCode:${param['errCode']} storagePath:${param['storagePath']}'); - } - if (type == TRTCCloudListener.onLocalRecordComplete) { - print('TRTCCloudListener onLocalRecordComplete errCode:${param['errCode']} storagePath:${param['storagePath']}'); + _onShareClick() { + if (Platform.isAndroid) { + if (!_meetModel.getUserInfo().isShowingWindow) { + _startShare(0); + this.setState(() { + _meetModel.getUserInfo().isShowingWindow = true; + }); + } else { + _trtcCloud.stopScreenCapture(); + this.setState(() { + _meetModel.getUserInfo().isShowingWindow = false; + }); + } } } - Future _showErrordDialog(errorMsg) { + Future _showErrorDialog(errorMsg) { return showDialog( context: context, barrierDismissible: false, @@ -342,92 +511,6 @@ class MeetingPageState extends State with WidgetsBindingObserver { ); } - _startShare({String shareUserId = '', String shareUserSig = ''}) async { - if (shareUserId == '') await _trtcCloud.stopLocalPreview(); - _trtcCloud.startScreenCapture( - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB, - TRTCVideoEncParam( - videoFps: 10, - videoResolution: TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1280_720, - videoBitrate: 1600, - videoResolutionMode: TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT, - ), - appGroup: iosAppGroup, - shareUserId: shareUserId, - shareUserSig: shareUserSig, - ); - } - - _onShareClick() async { - if (kIsWeb) { - String shareUserId = 'share-' + _meetModel.getUserInfo().userId; - String shareUserSig = await GenerateTestUserSig.genTestSig(shareUserId); - await _startShare(shareUserId: shareUserId, shareUserSig: shareUserSig); - } else if (!kIsWeb && Platform.isAndroid) { - if (!_meetModel.getUserInfo().isShowingWindow) { - await _startShare(); - _userList[0].isOpenCamera = false; - this.setState(() { - _meetModel.getUserInfo().isShowingWindow = true; - _meetModel.getUserInfo().isOpenCamera = false; - }); - } else { - await _trtcCloud.stopScreenCapture(); - _userList[0].isOpenCamera = true; - _trtcCloud.startLocalPreview( - _meetModel.getUserInfo().isFrontCamera, _meetModel.getUserInfo().localViewId); - this.setState(() { - _meetModel.getUserInfo().isShowingWindow = false; - _meetModel.getUserInfo().isOpenCamera = true; - }); - } - } else if (!kIsWeb && Platform.isMacOS) { - MeetingTool.toast( - 'The current platform does not support screen sharing.', context); - return; - } else if (!kIsWeb && Platform.isWindows) { - if (!_meetModel.getUserInfo().isShowingWindow) { - TRTCScreenCaptureSourceList list = await _trtcCloud.getScreenCaptureSources(thumbnailWidth: 100, thumbnailHeight: 100, iconWidth: 100, iconHeight: 100); - showWindowSelector(context, list); - } else { - await _trtcCloud.stopScreenCapture(); - _userList[0].isOpenCamera = true; - _trtcCloud.startLocalPreview( - _meetModel.getUserInfo().isFrontCamera, _meetModel.getUserInfo().localViewId); - this.setState(() { - _meetModel.getUserInfo().isShowingWindow = false; - _meetModel.getUserInfo().isOpenCamera = true; - }); - } - } else { - await _startShare(); - // The screen sharing function can only be tested on the real machine - ReplayKitLauncher.launchReplayKitBroadcast(iosExtensionName); - this.setState(() { - _meetModel.getUserInfo().isOpenCamera = false; - }); - } - } - - void showWindowSelector(BuildContext context, TRTCScreenCaptureSourceList windows) async { - final result = await showDialog( - context: context, - builder: (BuildContext context) { - return WindowSelectorDialog(windows: windows); - }, - ); - - if (result != null) { - print('Selected window index: $result'); - await _trtcCloud.selectScreenCaptureTarget(windows.sourceInfo[result], TRTCScreenCaptureProperty()); - await _startShare(); - this.setState(() { - _meetModel.getUserInfo().isShowingWindow = true; - _meetModel.getUserInfo().isOpenCamera = false; - }); - } -} - Widget _renderView(UserModel item, valueKey, width, height) { if (item.isOpenCamera) { return GestureDetector( @@ -436,14 +519,9 @@ class MeetingPageState extends State with WidgetsBindingObserver { child: TRTCCloudVideoView( key: valueKey, hitTestBehavior: PlatformViewHitTestBehavior.transparent, - viewType: _meetModel.getTextureRenderingEnable() - ? TRTCCloudDef.TRTC_VideoView_Texture - : TRTCCloudDef.TRTC_VideoView_TextureView, - // viewMode: TRTCCloudDef.TRTC_VideoView_Model_Hybrid, - textureParam: _buildTextureParam(item, width, height), onViewCreated: (viewId) async { if (item.userId == _meetModel.getUserInfo().userId) { - await _trtcCloud.startLocalPreview( + _trtcCloud.startLocalPreview( _meetModel.getUserInfo().isFrontCamera, viewId); setState(() { _meetModel.getUserInfo().localViewId = viewId; @@ -452,8 +530,8 @@ class MeetingPageState extends State with WidgetsBindingObserver { _trtcCloud.startRemoteView( item.userId, item.type == 'video' - ? TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG - : TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB, + ? TRTCVideoStreamType.big + : TRTCVideoStreamType.sub, viewId); } item.localViewId = viewId; @@ -468,22 +546,6 @@ class MeetingPageState extends State with WidgetsBindingObserver { } } - CustomRender? _buildTextureParam(UserModel item, width, height) { - if (_meetModel.getTextureRenderingEnable()) { - return CustomRender( - userId: item.userId, - isLocal: item.userId == _meetModel.getUserInfo().userId ? true : false, - streamType: item.type == 'video' - ? TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG - : TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB, - width: width.round(), - height: height.round(), - ); - } else { - return null; - } - } - /// The user name and sound are displayed on the video layer Widget _videoVoice(UserModel item) { return Positioned( @@ -525,10 +587,10 @@ class MeetingPageState extends State with WidgetsBindingObserver { onPressed: () async { if (_meetModel.getUserInfo().isSpeak) { _txDeviceManager.setAudioRoute( - TRTCCloudDef.TRTC_AUDIO_ROUTE_EARPIECE); + TXAudioRoute.speakerPhone); } else { _txDeviceManager - .setAudioRoute(TRTCCloudDef.TRTC_AUDIO_ROUTE_SPEAKER); + .setAudioRoute(TXAudioRoute.earpiece); } setState(() { _meetModel.getUserInfo().isSpeak = !_meetModel.getUserInfo().isSpeak; @@ -575,147 +637,6 @@ class MeetingPageState extends State with WidgetsBindingObserver { alignment: Alignment.topCenter); } - ///Beauty setting floating layer - Widget _beautySetting() { - return Positioned( - bottom: 80, - child: Offstage( - offstage: _meetModel.getUserInfo().isShowBeauty, - child: Container( - padding: EdgeInsets.all(10), - color: Color.fromRGBO(0, 0, 0, 0.8), - height: 100, - width: MediaQuery.of(context).size.width, - child: Column( - children: [ - Row(children: [ - Expanded( - flex: 2, - child: Slider( - value: _meetModel.getBeautyInfo()[_curBeauty] ?? 0.0, - min: 0, - max: 9, - divisions: 9, - onChanged: (double value) { - switch (_curBeauty) { - case BeautyType.smooth: - _txBeautyManager.setBeautyLevel(value.round()); - break; - case BeautyType.nature: - _txBeautyManager.setBeautyLevel(value.round()); - break; - case BeautyType.pitu: - _txBeautyManager.setBeautyLevel(value.round()); - break; - case BeautyType.ruddy: - _txBeautyManager.setRuddyLevel(value.round()); - break; - default: - break; - } - - this.setState(() { - _meetModel.getBeautyInfo()[_curBeauty] = value; - }); - }, - ), - ), - Text(_meetModel.getBeautyInfo()[_curBeauty]?.round().toString() ?? '0', - textAlign: TextAlign.center, - style: TextStyle(color: Colors.white)), - ]), - Padding( - padding: EdgeInsets.only(top: 10), - child: Row( - children: [ - GestureDetector( - child: Container( - alignment: Alignment.centerLeft, - width: 80.0, - child: Text( - 'Smooth', - style: TextStyle( - color: _curBeauty == BeautyType.smooth - ? Color.fromRGBO(64, 158, 255, 1) - : Colors.white), - ), - ), - onTap: () => this.setState(() { - _txBeautyManager.setBeautyStyle( - TRTCCloudDef.TRTC_BEAUTY_STYLE_SMOOTH); - _curBeauty = BeautyType.smooth; - _txBeautyManager.setBeautyLevel( - _meetModel.getBeautyInfo()[_curBeauty]?.round() ?? 0); - }), - ), - GestureDetector( - child: Container( - alignment: Alignment.centerLeft, - width: 80.0, - child: Text( - 'Nature', - style: TextStyle( - color: _curBeauty == BeautyType.nature - ? Color.fromRGBO(64, 158, 255, 1) - : Colors.white), - ), - ), - onTap: () => this.setState(() { - _txBeautyManager.setBeautyStyle( - TRTCCloudDef.TRTC_BEAUTY_STYLE_NATURE); - _curBeauty = BeautyType.nature; - _txBeautyManager.setBeautyLevel( - _meetModel.getBeautyInfo()[_curBeauty]?.round() ?? 0); - }), - ), - GestureDetector( - child: Container( - alignment: Alignment.centerLeft, - width: 80.0, - child: Text( - 'Pitu', - style: TextStyle( - color: _curBeauty == BeautyType.pitu - ? Color.fromRGBO(64, 158, 255, 1) - : Colors.white), - ), - ), - onTap: () => this.setState(() { - _txBeautyManager.setBeautyStyle( - TRTCCloudDef.TRTC_BEAUTY_STYLE_PITU); - _curBeauty = BeautyType.pitu; - _txBeautyManager.setBeautyLevel( - _meetModel.getBeautyInfo()[_curBeauty]?.round() ?? 0); - }), - ), - GestureDetector( - child: Container( - alignment: Alignment.centerLeft, - width: 50.0, - child: Text( - 'Ruddy', - style: TextStyle( - color: _curBeauty == BeautyType.ruddy - ? Color.fromRGBO(64, 158, 255, 1) - : Colors.white), - ), - ), - onTap: () => this.setState(() { - _curBeauty = BeautyType.ruddy; - _txBeautyManager.setRuddyLevel( - _meetModel.getBeautyInfo()[_curBeauty]?.round() ?? 0); - }), - ), - ], - ), - ), - ], - ), - ), - ), - ); - } - Widget _bottomSetting() { return new Align( child: new Container( @@ -813,16 +734,151 @@ class MeetingPageState extends State with WidgetsBindingObserver { alignment: Alignment.bottomCenter); } + // Widget _beautySetting() { + // return Positioned( + // bottom: 80, + // child: Offstage( + // offstage: _meetModel.getUserInfo().isShowBeauty, + // child: Container( + // padding: EdgeInsets.all(10), + // color: Color.fromRGBO(0, 0, 0, 0.8), + // height: 100, + // width: MediaQuery.of(context).size.width, + // child: Column( + // children: [ + // Row(children: [ + // Expanded( + // flex: 2, + // child: Slider( + // value: _meetModel.getBeautyInfo()[_beautyType] ?? 0.0, + // min: 0, + // max: 9, + // divisions: 9, + // onChanged: (double value) { + // switch (_beautyType) { + // case BeautyType.smooth: + // _trtcCloud.setBeautyStyle(TRTCBeautyStyle.smooth, value.round(), 0, 0); + // break; + // case BeautyType.nature: + // _trtcCloud.setBeautyStyle(TRTCBeautyStyle.nature, value.round(), 0, 0); + // break; + // case BeautyType.white: + // _trtcCloud.setBeautyStyle(TRTCBeautyStyle.smooth, 0, value.round(), 0); + // break; + // case BeautyType.ruddy: + // _trtcCloud.setBeautyStyle(TRTCBeautyStyle.smooth, 0, 0, value.round()); + // break; + // default: + // break; + // } + // this.setState(() { + // _meetModel.getBeautyInfo()[_beautyType] = value; + // }); + // }, + // ), + // ), + // Text(_meetModel.getBeautyInfo()[_beautyType]?.round().toString() ?? '0', + // textAlign: TextAlign.center, + // style: TextStyle(color: Colors.white)), + // ]), + // + // Padding( + // padding: EdgeInsets.only(top: 10), + // child: Row( + // children: [ + // GestureDetector( + // child: Container( + // alignment: Alignment.centerLeft, + // width: 80.0, + // child: Text( + // 'Smooth', + // style: TextStyle( + // color: _beautyType == BeautyType.smooth + // ? Color.fromRGBO(64, 158, 255, 1) + // : Colors.white), + // ), + // ), + // onTap: () => this.setState(() { + // _beautyType = BeautyType.smooth; + // _trtcCloud.setBeautyStyle(TRTCBeautyStyle.smooth, + // _meetModel.getBeautyInfo()[BeautyType.smooth]?.round() ?? 0, 0, 0); + // }), + // ), + // + // GestureDetector( + // child: Container( + // alignment: Alignment.centerLeft, + // width: 80.0, + // child: Text( + // 'Nature', + // style: TextStyle( + // color: _beautyType == BeautyType.nature + // ? Color.fromRGBO(64, 158, 255, 1) + // : Colors.white), + // ), + // ), + // onTap: () => this.setState(() { + // _beautyType = BeautyType.nature; + // _trtcCloud.setBeautyStyle(TRTCBeautyStyle.nature, + // _meetModel.getBeautyInfo()[BeautyType.nature]?.round() ?? 0, 0, 0); + // }), + // ), + // + // GestureDetector( + // child: Container( + // alignment: Alignment.centerLeft, + // width: 80.0, + // child: Text( + // 'White', + // style: TextStyle( + // color: _beautyType == BeautyType.white + // ? Color.fromRGBO(64, 158, 255, 1) + // : Colors.white), + // ), + // ), + // onTap: () => this.setState(() { + // _beautyType = BeautyType.white; + // _trtcCloud.setBeautyStyle(TRTCBeautyStyle.nature, 0, + // _meetModel.getBeautyInfo()[BeautyType.ruddy]?.round() ?? 0, 0); + // }), + // ), + // + // GestureDetector( + // child: Container( + // alignment: Alignment.centerLeft, + // width: 50.0, + // child: Text( + // 'Ruddy', + // style: TextStyle( + // color: _beautyType == BeautyType.ruddy + // ? Color.fromRGBO(64, 158, 255, 1) + // : Colors.white), + // ), + // ), + // onTap: () => this.setState(() { + // _beautyType = BeautyType.ruddy; + // _trtcCloud.setBeautyStyle(TRTCBeautyStyle.nature, 0, 0, + // _meetModel.getBeautyInfo()[BeautyType.white]?.round() ?? 0); + // }), + // ), + // ], + // ), + // ), + // ], + // ), + // ), + // ), + // ); + // } + @override Widget build(BuildContext context) { return Scaffold( key: _scaffoldKey, - body: PopScope( - canPop: false, - onPopInvoked: (value) { - if (value) { - _trtcCloud.exitRoom(); - } + body: WillPopScope( + onWillPop: () async { + _trtcCloud.exitRoom(); + return true; }, child: Stack( children: [ @@ -882,7 +938,7 @@ class MeetingPageState extends State with WidgetsBindingObserver { ); }), _topSetting(), - _beautySetting(), + // _beautySetting(), _bottomSetting() ], ), diff --git a/TRTC-Simple-Demo/lib/ui/member_list.dart b/TRTC-Simple-Demo/lib/ui/member_list.dart index 24cb04e..be9ba88 100644 --- a/TRTC-Simple-Demo/lib/ui/member_list.dart +++ b/TRTC-Simple-Demo/lib/ui/member_list.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; import 'package:trtc_demo/models/meeting_model.dart'; import 'package:provider/provider.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; import 'package:trtc_demo/models/user_model.dart'; import 'package:trtc_demo/utils/tool.dart'; @@ -101,12 +102,12 @@ class MemberListPageState extends State { if (item.enableAudio == false) { item.enableAudio = true; - _trtcCloud.muteRemoteAudio( - item.userId, false); + // _trtcCloud.muteRemoteAudio( + // item.userId, false); } else { item.enableAudio = false; - _trtcCloud.muteRemoteAudio( - item.userId, true); + // _trtcCloud.muteRemoteAudio( + // item.userId, true); } this.setState(() {}); }), @@ -130,11 +131,11 @@ class MemberListPageState extends State { false) { item.enableVideo = true; _trtcCloud.muteRemoteVideoStream( - item.userId, false); + item.userId, TRTCVideoStreamType.big, false); } else { item.enableVideo = false; _trtcCloud.muteRemoteVideoStream( - item.userId, true); + item.userId, TRTCVideoStreamType.big, true); } this.setState(() {}); }), @@ -152,29 +153,37 @@ class MemberListPageState extends State { child: new Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ + // ElevatedButton( + // onPressed: () { + // _trtcCloud.muteAllRemoteAudio(_meetModel.getUserInfo().enableAudio); + // MeetingTool.toast(_totalSilence, context); + // for (int i = 0; i < _micList.length; i++) { + // _micList[i].enableAudio = !_micList[i].enableAudio; + // } + // this.setState(() { + // _totalSilence = _meetModel.getUserInfo().enableAudio + // ? "Total silence" + // : "Lift total silence"; + // }); + // }, + // child: Text(_totalSilence, + // style: TextStyle( + // color: Color.fromRGBO(245, 108, 108, 1))), + // ), ElevatedButton( onPressed: () { - _trtcCloud.muteAllRemoteAudio(_meetModel.getUserInfo().enableAudio); - MeetingTool.toast(_totalSilence, context); - for (int i = 0; i < _micList.length; i++) { - _micList[i].enableAudio = !_micList[i].enableAudio; - } - this.setState(() { - _totalSilence = _meetModel.getUserInfo().enableAudio - ? "Total silence" - : "Lift total silence"; - }); - }, - child: Text(_totalSilence, - style: TextStyle( - color: Color.fromRGBO(245, 108, 108, 1))), - ), - ElevatedButton( - onPressed: () { - _trtcCloud.muteAllRemoteVideoStreams(_meetModel.getUserInfo().enableVideo); + // _trtcCloud.muteAllRemoteVideoStreams(_meetModel.getUserInfo().enableVideo); + _trtcCloud.stopAllRemoteView(); MeetingTool.toast(_totalDarkness, context); for (int i = 0; i < _micList.length; i++) { _micList[i].enableVideo = !_micList[i].enableVideo; + if (_micList[i].enableVideo == true) { + _trtcCloud.startRemoteView(_micList[i].userId, + _micList[i].type == 'video' + ? TRTCVideoStreamType.big + : TRTCVideoStreamType.sub, + _micList[i].localViewId!); + } } this.setState(() { _totalDarkness = _meetModel.getUserInfo().enableVideo diff --git a/TRTC-Simple-Demo/lib/ui/settings.dart b/TRTC-Simple-Demo/lib/ui/settings.dart index 0cd11f1..19ff9a6 100644 --- a/TRTC-Simple-Demo/lib/ui/settings.dart +++ b/TRTC-Simple-Demo/lib/ui/settings.dart @@ -1,8 +1,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; /// Set video resolution class SettingsPage extends StatefulWidget { @@ -19,66 +19,66 @@ class SettingsPageState extends State with WidgetsBindingObserver double _currentPlayValue = 100; //Default playback volume bool _enabledMirror = true; String _currentResolution = "360 * 640"; // Default resolution - int _currentResValue = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360; + TRTCVideoResolution _currentResValue = TRTCVideoResolution.res_640_360; List _resolutionList = [ { - "value": TRTCCloudDef.TRTC_VIDEO_RESOLUTION_160_160, + "value": TRTCVideoResolution.res_160_160, "text": "160 * 160", "minBitrate": 40, "maxBitrate": 300, "curBitrate": 300 }, { - "value": TRTCCloudDef.TRTC_VIDEO_RESOLUTION_320_180, + "value": TRTCVideoResolution.res_320_180, "text": "180 * 320", "minBitrate": 80, "maxBitrate": 350, "curBitrate": 350 }, { - "value": TRTCCloudDef.TRTC_VIDEO_RESOLUTION_320_240, + "value": TRTCVideoResolution.res_320_240, "text": "240 * 320", "minBitrate": 100, "maxBitrate": 400, "curBitrate": 400 }, { - "value": TRTCCloudDef.TRTC_VIDEO_RESOLUTION_480_480, + "value": TRTCVideoResolution.res_480_480, "text": "480 * 480", "minBitrate": 200, "maxBitrate": 1000, "curBitrate": 750 }, { - "value": TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360, + "value": TRTCVideoResolution.res_640_360, "text": "360 * 640", "minBitrate": 200, "maxBitrate": 1000, "curBitrate": 900 }, { - "value": TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_480, + "value": TRTCVideoResolution.res_640_480, "text": "480 * 640", "minBitrate": 250, "maxBitrate": 1000, "curBitrate": 1000 }, { - "value": TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540, + "value": TRTCVideoResolution.res_960_540, "text": "540 * 960", "minBitrate": 400, "maxBitrate": 1600, "curBitrate": 1350 }, { - "value": TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1280_720, + "value": TRTCVideoResolution.res_1280_720, "text": "720 * 1280", "minBitrate": 500, "maxBitrate": 2000, "curBitrate": 1850 }, { - "value": TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1920_1080, + "value": TRTCVideoResolution.res_1920_1080, "text": "1080 * 1920", "minBitrate": 800, "maxBitrate": 3000, @@ -94,7 +94,7 @@ class SettingsPageState extends State with WidgetsBindingObserver @override initState() { super.initState(); - WidgetsBinding.instance.addObserver(this); + WidgetsBinding.instance!.addObserver(this); _initRoom(); } @@ -108,10 +108,10 @@ class SettingsPageState extends State with WidgetsBindingObserver }); if (value) { _trtcCloud.setLocalRenderParams(TRTCRenderParams( - mirrorType: TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE)); + mirrorType: TRTCVideoMirrorType.enable)); } else { _trtcCloud.setLocalRenderParams(TRTCRenderParams( - mirrorType: TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_DISABLE)); + mirrorType: TRTCVideoMirrorType.disable)); } } @@ -130,7 +130,7 @@ class SettingsPageState extends State with WidgetsBindingObserver videoResolution: _resolutionList[position]['value'], videoBitrate: _resolutionList[position]['curBitrate'], videoResolutionMode: - TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_LANDSCAPE)); + TRTCVideoResolutionMode.landscape)); morePageState(() { _currentResValue = _resolutionList[position]['value']; @@ -302,8 +302,8 @@ class SettingsPageState extends State with WidgetsBindingObserver divisions: 100, label: _currentCaptureValue.round().toString(), onChanged: (double value) { - _trtcCloud - .setAudioCaptureVolume(value.round()); + // _trtcCloud + // .setAudioCaptureVolume(value.round()); state(() { _currentCaptureValue = value; }); @@ -326,8 +326,8 @@ class SettingsPageState extends State with WidgetsBindingObserver divisions: 100, label: _currentPlayValue.round().toString(), onChanged: (double value) { - _trtcCloud - .setAudioPlayoutVolume(value.round()); + // _trtcCloud + // .setAudioPlayoutVolume(value.round()); state(() { _currentPlayValue = value; }); @@ -412,8 +412,6 @@ class SettingsPageState extends State with WidgetsBindingObserver } } break; - case AppLifecycleState.hidden: - break; } } diff --git a/TRTC-Simple-Demo/lib/ui/test/api_checker_button.dart b/TRTC-Simple-Demo/lib/ui/test/api_checker_button.dart new file mode 100644 index 0000000..aca5e0e --- /dev/null +++ b/TRTC-Simple-Demo/lib/ui/test/api_checker_button.dart @@ -0,0 +1,167 @@ + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:trtc_demo/ui/test/callback_checker.dart'; +import 'package:trtc_demo/ui/test/parameter_type.dart'; +import 'package:trtc_demo/utils/tool.dart'; + +enum ButtonStatus { + notChecked, + checking, + failed, + success, +} + +class ApiCheckerButton extends StatefulWidget { + final String methodName; + final String token; + final List parameters; + final String? extString; + final void Function(Map params) callApi; + + ApiCheckerButton({ + required this.methodName, + required this.parameters, + this.extString, + required this.callApi, + String? token, + }) : token = token ?? methodName; + + @override + _ApiCheckerButtonState createState() => _ApiCheckerButtonState(); +} + +class _ApiCheckerButtonState extends State { + ButtonStatus _status = ButtonStatus.notChecked; + String _log = ''; + + void _showParameterDialog() { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: Text('Current Parameters'), + content: SingleChildScrollView( + child: ListBody( + children: widget.parameters.map((param) { + // 处理 value 的显示 + String valueDisplay; + valueDisplay = param.value.toString(); + return Text('${param.name} (${param.type}): $valueDisplay'); + }).toList(), + ), + ), + actions: [ + TextButton( + child: Text('Close'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + + Color _getStatusColor() { + switch (_status) { + case ButtonStatus.notChecked: + return Colors.grey; + case ButtonStatus.checking: + return Colors.yellow; + case ButtonStatus.failed: + return Colors.red; + case ButtonStatus.success: + return Colors.green; + default: + return Colors.grey; + } + } + + _onClickMethod() { + setState(() { + _status = ButtonStatus.checking; + }); + Map params = {}; + for (Parameter parameter in widget.parameters) { + params[parameter.name] = parameter.value; + } + widget.callApi(params); + CallbackChecker.setValidationToken( + widget.token, + CheckerCallback( + (bool checkerResult, String errMsg) { + if (checkerResult) { + setState(() { + _status = ButtonStatus.success; + _log = errMsg; + }); + } else { + setState(() { + _status = ButtonStatus.failed; + MeetingTool.toast(errMsg, context); + }); + } + } + ), + ); + } + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(8), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + InkWell( + onTap: () { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + content: SingleChildScrollView( + child: Column( + children: [ + Text("token: ${widget.token}"), + Text("log: $_log"), + ], + ), + ), + ); + } + ); + }, + child: Container( + height: 20, + width: 20, + decoration: BoxDecoration( + color: _getStatusColor(), + shape: BoxShape.circle, + ), + ), + ), + SizedBox(height: 8.0), + TextButton( + onPressed: _onClickMethod, + child: Text(widget.methodName), + ), + SizedBox(height: 8.0), + TextButton( + onPressed: _showParameterDialog, + style: TextButton.styleFrom( + padding: EdgeInsets.all(8.0), + side: BorderSide(color: Colors.blue), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(4.0), + ), + ), + child: Text(widget.extString ?? 'params'), + ), + ], + ), + ); + } + +} \ No newline at end of file diff --git a/TRTC-Simple-Demo/lib/ui/test/callback_checker.dart b/TRTC-Simple-Demo/lib/ui/test/callback_checker.dart new file mode 100644 index 0000000..9a87d3b --- /dev/null +++ b/TRTC-Simple-Demo/lib/ui/test/callback_checker.dart @@ -0,0 +1,62 @@ + + +import 'dart:async'; + +import 'package:flutter/cupertino.dart'; + +class CallbackChecker { + static bool isDetecting = false; + + static String? _validationToken; + + static CheckerCallback? _callback; + + static Timer? _timer; + + static void setValidationToken(String token, CheckerCallback callback) { + if (isDetecting) { + callback.onCheckerCallback(false, "already detecting"); + return; + } + isDetecting = true; + _callback = callback; + _validationToken = token; + + Duration timeout = Duration(seconds: 3); + + _timer = Timer(timeout, () { + isDetecting = false; + _validationToken = null; + _callback?.onCheckerCallback(false, "check timeout"); + _callback = null; + _timer = null; + }); + } + + static void invokeCheck(String s) { + if (isSubString(s)) { + _timer?.cancel(); + isDetecting = false; + _validationToken = null; + _callback!.onCheckerCallback(true, s); + _callback = null; + _timer = null; + } + } + + static bool isSubString(String str) { + if (_validationToken == null) { + return false; + } + str = str.replaceAll(RegExp(r'[\r\n]+'), ' '); + debugPrint("_validationToken : $_validationToken, str : $str"); + return str.toLowerCase().contains(_validationToken!.toLowerCase()); + } + +} + +class CheckerCallback { + void Function(bool checkerResult, String errorMessage) onCheckerCallback; + + CheckerCallback(this.onCheckerCallback); +} \ No newline at end of file diff --git a/TRTC-Simple-Demo/lib/ui/test/parameter_type.dart b/TRTC-Simple-Demo/lib/ui/test/parameter_type.dart new file mode 100644 index 0000000..4130d52 --- /dev/null +++ b/TRTC-Simple-Demo/lib/ui/test/parameter_type.dart @@ -0,0 +1,23 @@ + + + +enum ParameterType { + string, + int, + double, + bool, + tClass, + tEnum, +} + +class Parameter { + String name; + ParameterType type; + dynamic value; + + Parameter({ + required this.name, + required this.type, + required this.value + }); +} \ No newline at end of file diff --git a/TRTC-Simple-Demo/lib/ui/test/test_api.dart b/TRTC-Simple-Demo/lib/ui/test/test_api.dart index 900bde3..a518cb6 100644 --- a/TRTC-Simple-Demo/lib/ui/test/test_api.dart +++ b/TRTC-Simple-Demo/lib/ui/test/test_api.dart @@ -1,22 +1,27 @@ import 'dart:convert'; import 'dart:io'; -import 'package:flutter/foundation.dart'; +import 'dart:typed_data'; + import 'package:flutter/material.dart'; +import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud.dart'; +import 'package:tencent_rtc_sdk/tx_device_manager.dart'; +import 'package:tencent_rtc_sdk/tx_audio_effect_manager.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_def.dart'; +import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart'; +import 'package:flutter/cupertino.dart'; + import 'package:trtc_demo/debug/GenerateTestUserSig.dart'; import 'package:trtc_demo/models/meeting_model.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/tx_beauty_manager.dart'; -import 'package:tencent_trtc_cloud/tx_device_manager.dart'; -import 'package:tencent_trtc_cloud/tx_audio_effect_manager.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_listener.dart'; import 'package:trtc_demo/models/user_model.dart'; +import 'package:trtc_demo/ui/test/api_checker_button.dart'; +import 'package:trtc_demo/ui/test/callback_checker.dart'; +import 'package:trtc_demo/ui/test/parameter_type.dart'; import 'package:trtc_demo/utils/tool.dart'; -import 'package:path_provider/path_provider.dart'; -/// Video page +typedef VoidFunction = void Function(); + class TestPage extends StatefulWidget { @override State createState() => TestPageState(); @@ -28,168 +33,1401 @@ class TestPageState extends State { late TRTCCloud trtcCloud; late TXDeviceManager txDeviceManager; - late TXBeautyManager txBeautyManager; - late TXAudioEffectManager txAudioManager; + late TXAudioEffectManager txAudioEffectManager; - TRTCAudioFrameListener? _audioFrameListener; + String musicPath = ""; + String recordPath = ""; + + TRTCCloud? subCloud; @override - initState() { + void initState() { super.initState(); initRoom(); + initData(); meetModel = context.read(); userInfo = meetModel.getUserInfo(); } - initRoom() async { - trtcCloud = (await TRTCCloud.sharedInstance())!; - txDeviceManager = trtcCloud.getDeviceManager(); - txBeautyManager = trtcCloud.getBeautyManager(); - txAudioManager = trtcCloud.getAudioEffectManager(); - trtcCloud.registerListener((type, params) { - if (type == TRTCCloudListener.onSpeedTest) { - print("=====onSpeedTest====="); - print(params); - } - }); - } - - String getStreamId() { - String streamId = GenerateTestUserSig.sdkAppId.toString() + '_122_345_main'; - return streamId; - } - - // Set up a mixed flow - setMixConfig() { - /// Set up mixed stream pre-row-left and right mode - TRTCTranscodingConfig config = TRTCTranscodingConfig(); - config.videoWidth = 720; - config.videoHeight = 640; - config.videoBitrate = 1500; - config.videoFramerate = 20; - config.videoGOP = 2; - config.audioSampleRate = 48000; - config.audioBitrate = 64; - config.audioChannels = 2; - - config.streamId = getStreamId(); - - config.mode = TRTCCloudDef.TRTC_TranscodingConfigMode_Template_PresetLayout; - config.mixUsers = []; + initData() async { + Directory? appDocDir; + if(Platform.isAndroid) { + appDocDir = await getExternalStorageDirectory(); + } else { + appDocDir = await getApplicationDocumentsDirectory(); + } - TRTCMixUser mixUser = TRTCMixUser(); - mixUser.userId = "\$PLACE_HOLDER_LOCAL_MAIN\$"; - mixUser.zOrder = 0; - mixUser.x = 0; - mixUser.y = 0; - mixUser.width = 360; - mixUser.height = 640; - mixUser.roomId = '122'; - config.mixUsers?.add(mixUser); + recordPath = '${appDocDir?.path}/isolocalVideo.mp4'; - //Lianmai people screen location - TRTCMixUser remote = TRTCMixUser(); - remote.userId = "\$PLACE_HOLDER_REMOTE\$"; - remote.streamType = TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG; - remote.zOrder = 1; - remote.x = 360; - remote.y = 0; - remote.width = 360; - remote.height = 640; - remote.roomId = '122'; - config.mixUsers?.add(remote); - - trtcCloud.setMixTranscodingConfig(config); + musicPath = await MeetingTool.copyAssetToLocal('media/daoxiang.mp3'); } - setMixConfigManual() { - TRTCTranscodingConfig config = new TRTCTranscodingConfig(); - config.videoWidth = 720; - config.videoHeight = 1280; - config.videoBitrate = 1500; - config.videoFramerate = 20; - config.videoGOP = 2; - config.audioSampleRate = 48000; - config.audioBitrate = 64; - config.audioChannels = 2; - config.streamId = getStreamId(); - config.appId = 1256635546; - config.bizId = 93434; - config.backgroundColor = 0x000000; - config.backgroundImage = null; - - config.mode = TRTCCloudDef.TRTC_TranscodingConfigMode_Manual; - config.mixUsers = []; + initRoom() async { + trtcCloud = (await TRTCCloud.sharedInstance()); - // Anchor itself - TRTCMixUser mixUser = new TRTCMixUser(); - mixUser.userId = '345'; - mixUser.zOrder = 0; - mixUser.x = 0; - mixUser.y = 0; - mixUser.width = 720; - mixUser.height = 1280; - mixUser.roomId = '122'; - config.mixUsers?.add(mixUser); + txDeviceManager = trtcCloud.getDeviceManager(); + txAudioEffectManager = trtcCloud.getAudioEffectManager(); - TRTCMixUser remote = TRTCMixUser(); - remote.userId = '388546'; - remote.streamType = TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG; - remote.zOrder = 1; - remote.x = 180; - remote.y = 400; - remote.width = 135; - remote.height = 240; - remote.roomId = '122'; - config.mixUsers!.add(remote); - trtcCloud.setMixTranscodingConfig(config); + trtcCloud.setLogCallback(TRTCLogCallback( + onLog: (String msg, TRTCLogLevel level, String extInfo) { + CallbackChecker.invokeCheck(msg); + } + )); } - /// Pre-Edition-Painting Chinese Painting - setMixConfigInPicture() { - TRTCTranscodingConfig config = TRTCTranscodingConfig(); - config.videoWidth = 720; - config.videoHeight = 1280; - config.videoBitrate = 1500; - config.videoFramerate = 20; - config.videoGOP = 2; - config.audioSampleRate = 48000; - config.audioBitrate = 64; - config.audioChannels = 2; - config.streamId = getStreamId(); + @override + void dispose() { + super.dispose(); + } - config.mode = TRTCCloudDef.TRTC_TranscodingConfigMode_Template_PresetLayout; - config.mixUsers = []; + @override + Widget build(BuildContext context) { + return DefaultTabController( + length: 3, + child: Scaffold( + appBar: AppBar( + title: Text('Test API'), + bottom: TabBar( + isScrollable: true, + tabs: [ + Tab(text: 'TRTCCloud'), + Tab(text: 'TXDeviceManager'), + Tab(text: 'TXAudioEffectManager'), + ], + ), + ), + body: TabBarView( + children: [ + _testTRTCCloud(), + _testTXDevice(), + _testTXAudioEffect(), + ], + ), + ) + ); + } - // Anchor itself - TRTCMixUser mixUser = TRTCMixUser(); - mixUser.userId = "\$PLACE_HOLDER_LOCAL_MAIN\$"; - mixUser.zOrder = 0; - mixUser.x = 0; - mixUser.y = 0; - mixUser.width = 720; - mixUser.height = 1280; - mixUser.roomId = '122'; - config.mixUsers?.add(mixUser); + ListView _testTRTCCloud() { + return ListView( + children: [ + ApiCheckerButton( + methodName: "switchRole", + parameters: [ + Parameter(name: 'role', type: ParameterType.tEnum, value: TRTCRoleType.audience), + ], + extString: 'audience', + callApi: (params) { + trtcCloud.switchRole(params['role']); + } + ), + ApiCheckerButton( + methodName: "SwitchRole", + parameters: [ + Parameter(name: 'role', type: ParameterType.tEnum, value: TRTCRoleType.anchor), + ], + extString: 'anchor', + callApi: (params) { + trtcCloud.switchRole(params['role']); + } + ), + ApiCheckerButton( + methodName: "switchRoom", + parameters: [ + Parameter( + name: 'roomId', + type: ParameterType.tClass, + value: TRTCSwitchRoomConfig( + roomId: 666, + userSig: GenerateTestUserSig.genTestSig(userInfo.userId), + ), + ), + ], + extString: '666', + callApi: (params) { + trtcCloud.switchRoom(params['roomId']); + } + ), + ApiCheckerButton( + methodName: "switchRoom", + parameters: [ + Parameter( + name: 'roomId', + type: ParameterType.tClass, + value: TRTCSwitchRoomConfig( + roomId: meetModel.getMeetId()!, + userSig: GenerateTestUserSig.genTestSig(userInfo.userId), + ), + ), + ], + extString: 'origin', + callApi: (params) { + trtcCloud.switchRoom(params['roomId']); + } + ), + ApiCheckerButton( + methodName: 'connectOtherRoom', + parameters: [ + Parameter(name: 'param', type: ParameterType.string, + value: jsonEncode({ + 'roomId' : 155, + 'userId' : "345" + })), + ], + callApi: (params) { + trtcCloud.connectOtherRoom(params['param']); + }, + ), + // ApiCheckerButton( + // methodName: 'createSubCloud', + // parameters: [], + // callApi: (params) { + // subCloud ??= trtcCloud.createSubCloud(); + // } + // ), + // ApiCheckerButton( + // methodName: 'destroySubCloud', + // parameters: [ + // Parameter(name: 'subCloud', type: ParameterType.tClass, value: subCloud,), + // ], + // callApi: (params) { + // if (params['subCloud'] != null) { + // trtcCloud.destroySubCloud(params['subCloud']!); + // } + // } + // ), + ApiCheckerButton( + methodName: 'disconnectOtherRoom', + parameters: [], + callApi: (params) { + trtcCloud.disconnectOtherRoom(); + } + ), + ApiCheckerButton( + methodName: 'setDefaultStreamRecvMode', + parameters: [ + Parameter(name: 'autoRecvAudio', type: ParameterType.bool, value: false), + Parameter(name: 'autoRecvVideo', type: ParameterType.bool, value: false), + ], + callApi: (params) { + trtcCloud.setDefaultStreamRecvMode(params['autoRecvAudio'], params['autoRecvVideo']); + } + ), + ApiCheckerButton( + methodName: 'startPublishMediaStream', + parameters: [ + Parameter(name: 'target', type: ParameterType.tClass, value: _getTRTCPublishTarget()), + Parameter(name: 'param', type: ParameterType.tClass, value: _getTRTCStreamEncoderParam()), + Parameter(name: 'config', type: ParameterType.tClass, value: _getTRTCStreamMixingConfig()), + ], + callApi: (params) { + trtcCloud.startPublishMediaStream(params['target'], params['param'], params['config']); + } + ), + ApiCheckerButton( + methodName: 'updatePublishMediaStream', + parameters: [ + Parameter(name: 'taskId', type: ParameterType.string, value: "888",), + Parameter(name: 'target', type: ParameterType.tClass, value: _getTRTCPublishTarget()), + Parameter(name: 'param', type: ParameterType.tClass, value: _getTRTCStreamEncoderParam()), + Parameter(name: 'config', type: ParameterType.tClass, value: _getTRTCStreamMixingConfig()), + ], + callApi: (params) { + trtcCloud.updatePublishMediaStream(params['taskId'], params['target'], params['param'], params['config']); + } + ), + ApiCheckerButton( + methodName: 'stopPublishMediaStream', + parameters: [ + Parameter(name: 'taskId', type: ParameterType.string, value: "888",), + ], + callApi: (params) { + trtcCloud.stopPublishMediaStream(params['taskId']); + } + ), + ApiCheckerButton( + methodName: 'updateLocalView', + parameters: [ + Parameter(name: 'viewId', type: ParameterType.int, value: 0,), + ], + callApi: (params) { + trtcCloud.updateLocalView(params['viewId']); + } + ), + ApiCheckerButton( + methodName: 'muteLocalVideo', + parameters: [ + Parameter(name: 'streamType', type: ParameterType.tEnum, value: TRTCVideoStreamType.big), + Parameter(name: 'mute', type: ParameterType.bool, value: true,), + ], + extString: 'true', + callApi: (params) { + trtcCloud.muteLocalVideo(params['streamType'], params['mute']); + } + ), + ApiCheckerButton( + methodName: 'muteLocalVideo', + parameters: [ + Parameter(name: 'streamType', type: ParameterType.tEnum, value: TRTCVideoStreamType.big), + Parameter(name: 'mute', type: ParameterType.bool, value: false,), + ], + extString: 'false', + callApi: (params) { + trtcCloud.muteLocalVideo(params['streamType'], params['mute']); + } + ), + // ApiCheckerButton( + // methodName: 'setVideoMuteImage', + // token: 'setMuteImage', + // parameters: [ + // Parameter(name: 'image', type: ParameterType.tClass, value: TRTCImageBuffer(),), + // Parameter(name: 'fps', type: ParameterType.int, value: 5,), + // ], + // callApi: (params) { + // trtcCloud.setVideoMuteImage(params['image'], params['fps']); + // } + // ), + ApiCheckerButton( + methodName: 'updateRemoteView', + parameters: [ + Parameter(name: 'userId', type: ParameterType.string, value: 'value'), + Parameter(name: 'streamType', type: ParameterType.tEnum, value: TRTCVideoStreamType.big), + Parameter(name: 'viewId', type: ParameterType.int, value: 0,), + ], + callApi: (params) { + trtcCloud.updateRemoteView(params['userId'], params['streamType'], params['viewId']); + } + ), + ApiCheckerButton( + methodName: 'stopAllRemoteView', + parameters: [], + callApi: (params) { + trtcCloud.stopAllRemoteView(); + } + ), + ApiCheckerButton( + methodName: 'muteRemoteVideoStream', + token: 'MuteRemoteVideo', + parameters: [ + Parameter(name: 'userId', type: ParameterType.string, value: 'value'), + Parameter(name: 'streamType', type: ParameterType.tEnum, value: TRTCVideoStreamType.big), + Parameter(name: 'mute', type: ParameterType.bool, value: false,), + ], + callApi: (params) { + trtcCloud.muteRemoteVideoStream(params['userId'], params['streamType'], params['mute']); + } + ), + ApiCheckerButton( + methodName: 'muteAllRemoteVideoStreams', + token: 'MuteAllRemoteVideo', + parameters: [ + Parameter(name: 'mute', type: ParameterType.bool, value: true,), + ], + callApi: (params) { + trtcCloud.muteAllRemoteVideoStreams(params['mute']); + } + ), + ApiCheckerButton( + methodName: 'setVideoEncoderParam', + token: 'SetVideoEncodeParams', + parameters: [ + Parameter(name: 'params', type: ParameterType.tClass, + value: TRTCVideoEncParam( + videoBitrate: 1000, + videoResolution: TRTCVideoResolution.res_1920_1080, + videoResolutionMode: TRTCVideoResolutionMode.landscape, + videoFps: 15, + minVideoBitrate: 10, + enableAdjustRes: false, + ),), + ], + callApi: (params) { + trtcCloud.setVideoEncoderParam(params['params']); + } + ), + ApiCheckerButton( + methodName: 'setNetworkQosParam', + token: 'SetQosConfigParams', + parameters: [ + Parameter(name: 'params', type: ParameterType.tClass, + value: TRTCNetworkQosParam( + preference: TRTCVideoQosPreference.smooth, + ),), + ], + callApi: (params) { + trtcCloud.setNetworkQosParam(params['params']); + } + ), + ApiCheckerButton( + methodName: 'setLocalRenderParams', + parameters: [ + Parameter(name: 'params', type: ParameterType.tClass, + value: TRTCRenderParams( + rotation: TRTCVideoRotation.rotation0, + fillMode: TRTCVideoFillMode.fit, + mirrorType: TRTCVideoMirrorType.enable, + ),), + ], + callApi: (params) { + trtcCloud.setLocalRenderParams(params['params']); + } + ), + ApiCheckerButton( + methodName: 'setRemoteRenderParams', + parameters: [ + Parameter(name: 'userId', type: ParameterType.string, value: 'value'), + Parameter(name: 'streamType', type: ParameterType.tEnum, value: TRTCVideoStreamType.big), + Parameter(name: 'params', type: ParameterType.tClass, value: TRTCRenderParams(),), + ], + callApi: (params) { + trtcCloud.setRemoteRenderParams(params['userId'], params['streamType'], params['params']); + } + ), + ApiCheckerButton( + methodName: 'enableSmallVideoStream', + token: 'SetVideoEncodeParams', + parameters: [ + Parameter(name: 'enable', type: ParameterType.bool, value: true,), + Parameter(name: 'smallVideoEncParam', type: ParameterType.tClass, + value: TRTCVideoEncParam( + videoBitrate: 1000, + videoResolution: TRTCVideoResolution.res_320_240, + videoResolutionMode: TRTCVideoResolutionMode.portrait, + videoFps: 15, + minVideoBitrate: 103, + enableAdjustRes: false, + ),), + ], + callApi: (params) { + trtcCloud.enableSmallVideoStream(params['enable'], params['smallVideoEncParam']); + } + ), + ApiCheckerButton( + methodName: 'setRemoteVideoStreamType', + parameters: [ + Parameter(name: 'userId', type: ParameterType.string, value: 'value'), + Parameter(name: 'streamType', type: ParameterType.tEnum, value: TRTCVideoStreamType.big), + ], + callApi: (params) { + trtcCloud.setRemoteVideoStreamType(params['userId'], params['streamType']); + } + ), + ApiCheckerButton( + methodName: 'snapshotVideo', + parameters: [ + Parameter(name: 'userId', type: ParameterType.string, value: 'value'), + Parameter(name: 'streamType', type: ParameterType.tEnum, value: TRTCVideoStreamType.big), + Parameter(name: 'sourceType', type: ParameterType.tEnum, value: TRTCSnapshotSourceType.stream), + ], + callApi: (params) { + trtcCloud.snapshotVideo(params['userId'], params['streamType'], params['sourceType']); + } + ), + ApiCheckerButton( + methodName: 'setGravitySensorAdaptiveMode', + parameters: [ + Parameter(name: 'mode', type: ParameterType.tEnum, value: TRTCGSensorMode.uiAutoLayout), + ], + callApi: (params) { + trtcCloud.setGravitySensorAdaptiveMode(params['mode']); + } + ), + ApiCheckerButton( + methodName: 'startLocalAudio', + parameters: [ + Parameter(name: 'quality', type: ParameterType.tEnum, value: TRTCAudioQuality.music,), + ], + callApi: (params) { + trtcCloud.startLocalAudio(params['quality']); + } + ), + ApiCheckerButton( + methodName: 'stopLocalAudio', + parameters: [], + callApi: (params) { + trtcCloud.stopLocalAudio(); + } + ), + ApiCheckerButton( + methodName: 'muteLocalAudio', + parameters: [ + Parameter(name: 'enable', type: ParameterType.bool, value: true,), + ], + extString: 'true', + callApi: (params) { + trtcCloud.muteLocalAudio(params['enable']); + } + ), + ApiCheckerButton( + methodName: 'muteLocalAudio', + parameters: [ + Parameter(name: 'enable', type: ParameterType.bool, value: false,), + ], + extString: 'false', + callApi: (params) { + trtcCloud.muteLocalAudio(params['enable']); + } + ), + ApiCheckerButton( + methodName: 'muteRemoteAudio', + parameters: [ + Parameter(name: 'userId', type: ParameterType.string, value: 'value'), + Parameter(name: 'enable', type: ParameterType.bool, value: false,), + ], + callApi: (params) { + trtcCloud.muteRemoteAudio(params['userId'], params['enable']); + } + ), + ApiCheckerButton( + methodName: 'muteAllRemoteAudio', + parameters: [ + Parameter(name: 'enable', type: ParameterType.bool, value: false,), + ], + callApi: (params) { + trtcCloud.muteAllRemoteAudio(params['enable']); + } + ), + ApiCheckerButton( + methodName: 'setRemoteAudioVolume', + parameters: [ + Parameter(name: 'userId', type: ParameterType.string, value: 'value',), + Parameter(name: 'volume', type: ParameterType.int, value: 70,), + ], + callApi: (params) { + trtcCloud.setRemoteAudioVolume(params['userId'], params['volume']); + } + ), + ApiCheckerButton( + methodName: 'setAudioCaptureVolume', + parameters: [ + Parameter(name: 'volume', type: ParameterType.int, value: 80,), + ], + callApi: (params) { + trtcCloud.setAudioCaptureVolume(params['volume']); + } + ), + ApiCheckerButton( + methodName: 'getAudioCaptureVolume', + parameters: [], + callApi: (params) { + int result = trtcCloud.getAudioCaptureVolume(); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'setAudioPlayoutVolume', + parameters: [ + Parameter(name: 'volume', type: ParameterType.int, value: 60,), + ], + callApi: (params) { + trtcCloud.setAudioPlayoutVolume(params['volume']); + } + ), + ApiCheckerButton( + methodName: 'getAudioPlayoutVolume', + parameters: [], + callApi: (params) { + int result = trtcCloud.getAudioPlayoutVolume(); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'enableAudioVolumeEvaluation', + parameters: [ + Parameter(name: 'enable', type: ParameterType.bool, value: false,), + Parameter(name: 'params', type: ParameterType.tClass, + value: TRTCAudioVolumeEvaluateParams( + enablePitchCalculation: true, + enableSpectrumCalculation: false, + enableVadDetection: true, + interval: 1200, + ), + ), + ], + callApi: (params) { + trtcCloud.enableAudioVolumeEvaluation(params['enable'], params['params']); + } + ), + ApiCheckerButton( + methodName: 'startLocalRecording', + parameters: [ + Parameter(name: 'param', type: ParameterType.tClass, + value: TRTCLocalRecordingParams( + filePath: recordPath, + recordType: TRTCLocalRecordType.both, + interval: 10000, + maxDurationPerFile: 100000, + ),), + ], + callApi: (params) { + int result = trtcCloud.startLocalRecording(params['param']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'stopLocalRecording', + parameters: [], + callApi: (params) { + trtcCloud.stopLocalRecording(); + }, + ), + // ApiCheckerButton( + // methodName: 'setWatermark', + // parameters: [ + // Parameter(name: 'streamType', type: ParameterType.tEnum, value: TRTCVideoStreamType.big), + // Parameter(name: 'srcData', type: ParameterType.string, value: 'images/watermark_img.png'), + // Parameter(name: 'srcType', type: ParameterType.tEnum, value: TRTCWaterMarkSrcType.file), + // Parameter(name: 'width', type: ParameterType.int, value: 100), + // Parameter(name: 'height', type: ParameterType.int, value: 100), + // Parameter(name: 'xOffset', type: ParameterType.double, value: 0.5), + // Parameter(name: 'yOffset', type: ParameterType.double, value: 0.5), + // Parameter(name: 'fWidthRatio', type: ParameterType.double, value: 0.9), + // ], + // callApi: (params) { + // trtcCloud.setWaterMark(params['streamType'], params['srcData'], + // params['srcType'], params['width'], params['height'], + // params['xOffset'], params['yOffset'], params['fWidthRatio']); + // } + // ), + ApiCheckerButton( + methodName: 'startSystemAudioLoopback', + parameters: [], + callApi: (params) { + trtcCloud.startSystemAudioLoopback(); + } + ), + ApiCheckerButton( + methodName: 'setSystemAudioLoopbackVolume', + parameters: [ + Parameter(name: 'volume', type: ParameterType.int, value: 50), + ], + callApi: (params) { + trtcCloud.setSystemAudioLoopbackVolume(params['volume']); + } + ), + ApiCheckerButton( + methodName: 'startScreenCapture', + parameters: [ + Parameter(name: 'viewId', type: ParameterType.int, value: 0), + Parameter(name: 'streamType', type: ParameterType.tEnum, value: TRTCVideoStreamType.sub), + Parameter(name: 'encParam', type: ParameterType.tClass, value: TRTCVideoEncParam()), + ], + callApi: (params) { + trtcCloud.startScreenCapture(params['viewId'], params['streamType'], params['encParam']); + } + ), + ApiCheckerButton( + methodName: 'pauseScreenCapture', + parameters: [], + callApi: (params) { + trtcCloud.pauseScreenCapture(); + } + ), + ApiCheckerButton( + methodName: 'resumeScreenCapture', + parameters: [], + callApi: (params) { + trtcCloud.resumeScreenCapture(); + } + ), + ApiCheckerButton( + methodName: 'stopScreenCapture', + parameters: [], + callApi: (params) { + trtcCloud.stopScreenCapture(); + } + ), + ApiCheckerButton( + methodName: 'getScreenCaptureSources', + parameters: [ + Parameter(name: 'thumbnail', type: ParameterType.tClass, value: TRTCSize()), + Parameter(name: 'icon', type: ParameterType.tClass, value: TRTCSize()), + ], + callApi: (params) { + TRTCScreenCaptureSourceList? list = trtcCloud.getScreenCaptureSources(params['thumbnail'], params['icon']); + if (list != null) { + _showList(list.sourceList); + } + } + ), + ApiCheckerButton( + methodName: 'selectScreenCaptureTarget', + parameters: [ + Parameter(name: 'source', type: ParameterType.tClass, value: TRTCScreenCaptureSourceInfo()), + Parameter(name: 'rect', type: ParameterType.tClass, value: TRTCRect()), + Parameter(name: 'property', type: ParameterType.tClass, value: TRTCScreenCaptureProperty()), + ], + callApi: (params) { + trtcCloud.selectScreenCaptureTarget(params['source'], params['rect'], params['property']); + } + ), + ApiCheckerButton( + methodName: 'setSubStreamEncoderParam', + token: 'SetVideoEncodeParams', + parameters: [ + Parameter(name: 'param', type: ParameterType.tClass, + value: TRTCVideoEncParam( + videoBitrate: 1000, + videoResolution: TRTCVideoResolution.res_256_144, + videoResolutionMode: TRTCVideoResolutionMode.landscape, + videoFps: 12, + minVideoBitrate: 10, + enableAdjustRes: true, + )), + ], + callApi: (params) { + trtcCloud.setSubStreamEncoderParam(params['param']); + } + ), + ApiCheckerButton( + methodName: 'enableCustomVideoCapture', + parameters: [ + Parameter(name: 'streamType', type: ParameterType.tEnum, value: TRTCVideoStreamType.sub), + Parameter(name: 'enable', type: ParameterType.bool, value: false), + ], + callApi: (params) { + trtcCloud.enableCustomVideoCapture(params['streamType'], params['enable']); + } + ), + ApiCheckerButton( + methodName: 'sendCustomVideoData', + parameters: [ + Parameter(name: 'streamType', type: ParameterType.tEnum, value: TRTCVideoStreamType.big), + Parameter(name: 'frame', type: ParameterType.tClass, value: TRTCVideoFrame()), + ], + callApi: (params) { + trtcCloud.sendCustomVideoData(params['streamType'], params['frame']); + } + ), + ApiCheckerButton( + methodName: 'enableCustomAudioCapture', + parameters: [ + Parameter(name: 'enable', type: ParameterType.bool, value: true), + ], + callApi: (params) { + trtcCloud.enableCustomAudioCapture(params['enable']); + } + ), + ApiCheckerButton( + methodName: 'sendCustomAudioData', + parameters: [ + Parameter(name: 'frame', type: ParameterType.tClass, + value: TRTCAudioFrame(length: 3,data: Uint8List.fromList([123,1231,321])) + ), + ], + callApi: (params) { + trtcCloud.sendCustomAudioData(params['frame']); + } + ), + ApiCheckerButton( + methodName: 'enableMixExternalAudioFrame', + parameters: [ + Parameter(name: 'enablePublish', type: ParameterType.bool, value: true), + Parameter(name: 'enablePlayout', type: ParameterType.bool, value: false), + ], + callApi: (params) { + trtcCloud.enableMixExternalAudioFrame(params['enablePublish'], params['enablePlayout']); + } + ), + // ApiCheckerButton( + // methodName: 'enableLocalVideoCustomProcess', + // token: 'EnableVideoCustomPreprocess', + // parameters: [ + // Parameter(name: 'enable', type: ParameterType.bool, value: true), + // Parameter(name: 'format', type: ParameterType.tEnum, value: TRTCVideoPixelFormat.unknown), + // Parameter(name: 'type', type: ParameterType.tEnum, value: TRTCVideoBufferType.unknown), + // ], + // callApi: (params) { + // trtcCloud.enableLocalVideoCustomProcess(params['enable'], params['format'], params['type']); + // } + // ), + // ApiCheckerButton( + // methodName: 'setLocalVideoCustomProcessCallback', + // parameters: [], + // callApi: (params) { + // trtcCloud.setLocalVideoCustomProcessCallback(null); + // } + // ), + // ApiCheckerButton( + // methodName: 'setLocalVideoRenderCallback', + // parameters: [ + // Parameter(name: 'format', type: ParameterType.tEnum, value: TRTCVideoPixelFormat.unknown), + // Parameter(name: 'type', type: ParameterType.tEnum, value: TRTCVideoBufferType.unknown), + // ], + // callApi: (params) { + // int result = trtcCloud.setLocalVideoRenderCallback(params['format'], params['type'], null); + // MeetingTool.toast(result.toString(), context); + // } + // ), + // ApiCheckerButton( + // methodName: 'setRemoteVideoRenderCallback', + // parameters: [ + // Parameter(name: 'userId', type: ParameterType.string, value: '123'), + // Parameter(name: 'format', type: ParameterType.tEnum, value: TRTCVideoPixelFormat.unknown), + // Parameter(name: 'type', type: ParameterType.tEnum, value: TRTCVideoBufferType.unknown), + // ], + // callApi: (params) { + // int result = trtcCloud.setRemoteVideoRenderCallback(params['userId'], params['format'], params['type'], null); + // MeetingTool.toast(result.toString(), context); + // } + // ), + // ApiCheckerButton( + // methodName: 'setAudioFrameCallback', + // parameters: [], + // callApi: (params) { + // int result = trtcCloud.setAudioFrameCallback( + // TRTCAudioFrameCallback( + // onCapturedAudioFrame: (frame) { + // debugPrint("onCapturedAudioFrame frame: ${frame.data.length}"); + // String hexString = frame.data.map((byte) => byte.toRadixString(16).padLeft(2, '0')).join(' '); + // debugPrint("onCapturedAudioFrame framedata: $hexString"); + // }, + // onLocalProcessedAudioFrame: (frame) { + // + // }, + // onPlayAudioFrame: (frame, userId) { + // + // }, + // onMixedPlayAudioFrame: (frame) { + // + // }, + // onMixedAllAudioFrame: (frame) { + // debugPrint("onMixedAllAudioFrame frame: ${frame.data.length}"); + // String hexString = frame.data.map((byte) => byte.toRadixString(16).padLeft(2, '0')).join(' '); + // debugPrint("onMixedAllAudioFrame framedata: $hexString"); + // } + // )); + // MeetingTool.toast(result.toString(), context); + // } + // ), + ApiCheckerButton( + methodName: 'sendCustomCmdMsg', + parameters: [ + Parameter(name: 'cmdID', type: ParameterType.int, value: 0), + Parameter(name: 'data', type: ParameterType.string, value: '123'), + Parameter(name: 'reliable', type: ParameterType.bool, value: false), + Parameter(name: 'ordered', type: ParameterType.bool, value: false), + ], + callApi: (params) { + bool result = trtcCloud.sendCustomCmdMsg(params['cmdID'], params['data'], params['reliable'], params['ordered']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'sendSEIMsg', + parameters: [ + Parameter(name: 'data', type: ParameterType.string, value: '123'), + Parameter(name: 'repeatCount', type: ParameterType.int, value: 1), + ], + callApi: (params) { + bool result = trtcCloud.sendSEIMsg(params['data'], params['repeatCount']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'startSpeedTest', + parameters: [ + Parameter(name: 'params', type: ParameterType.tClass, + value: TRTCSpeedTestParams( + sdkAppId: GenerateTestUserSig.sdkAppId, + userId: "5555", + userSig: GenerateTestUserSig.genTestSig("5555"), + scene: TRTCSpeedTestScene.delayAndBandwidthTesting, + expectedDownBandwidth: 500, + expectedUpBandwidth: 500, + )), + ], + callApi: (params) { + int result = trtcCloud.startSpeedTest(params['params']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'stopSpeedTest', + parameters: [], + callApi: (params) { + trtcCloud.stopSpeedTest(); + } + ), + ApiCheckerButton( + methodName: 'getSDKVersion', + parameters: [], + callApi: (params) { + String version = trtcCloud.getSDKVersion(); + MeetingTool.toast(version, context); + } + ), + ApiCheckerButton( + methodName: 'setLogLevel', + parameters: [ + Parameter(name: 'level', type: ParameterType.tEnum, value: TRTCLogLevel.none), + ], + callApi: (params) { + trtcCloud.setLogLevel(params['level']); + } + ), - //Lianmai people screen location - TRTCMixUser remote = TRTCMixUser(); - remote.userId = "\$PLACE_HOLDER_REMOTE\$"; - remote.streamType = TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG; + ApiCheckerButton( + methodName: 'showDebugView', + parameters: [], + callApi: (params) { + trtcCloud.showDebugView(1); + } + ), - remote.zOrder = 1; - remote.x = 500; - remote.y = 150; - remote.width = 135; - remote.height = 240; - remote.roomId = '122'; - config.mixUsers?.add(remote); + ApiCheckerButton( + methodName: 'callExperimentalAPI', + parameters: [], + callApi: (params) { + trtcCloud.callExperimentalAPI(jsonEncode({"api":"enablePictureInPictureFloatingWindow", + "params":{"enable": true}})); + } + ), + ], + ); + } - trtcCloud.setMixTranscodingConfig(config); + ListView _testTXAudioEffect() { + return ListView( + children: [ + ApiCheckerButton( + methodName: 'enableVoiceEarMonitor', + parameters: [ + Parameter(name: 'enable', type: ParameterType.bool, value: true), + ], + callApi: (params) { + txAudioEffectManager.enableVoiceEarMonitor(params['enable']); + } + ), + ApiCheckerButton( + methodName: 'setVoiceEarMonitorVolume', + parameters: [ + Parameter(name: 'volume', type: ParameterType.int, value: 60), + ], + callApi: (params) { + txAudioEffectManager.setVoiceEarMonitorVolume(params['volume']); + } + ), + ApiCheckerButton( + methodName: 'setVoiceReverbType', + parameters: [ + Parameter(name: 'type', type: ParameterType.tEnum, value: TXVoiceReverbType.type3), + ], + callApi: (params) { + txAudioEffectManager.setVoiceReverbType(params['type']); + } + ), + ApiCheckerButton( + methodName: 'setVoiceChangerType', + parameters: [ + Parameter(name: 'type', type: ParameterType.tEnum, value: TXVoiceChangerType.type1), + ], + callApi: (params) { + txAudioEffectManager.setVoiceChangerType(params['type']); + } + ), + ApiCheckerButton( + methodName: 'setVoiceCaptureVolume', + parameters: [ + Parameter(name: 'volume', type: ParameterType.int, value: 60), + ], + callApi: (params) { + txAudioEffectManager.setVoiceCaptureVolume(params['volume']); + } + ), + ApiCheckerButton( + methodName: 'setVoicePitch', + parameters: [ + Parameter(name: 'pitch', type: ParameterType.double, value: 0.5), + ], + callApi: (params) { + txAudioEffectManager.setVoicePitch(params['pitch']); + } + ), + ApiCheckerButton( + methodName: 'startPlayMusic', + parameters: [], + callApi: (params) { + txAudioEffectManager.setMusicObserver(1,TXMusicPlayObserver(onStart: (int id, int errorCode){ + debugPrint("TRTCCloudExample TXMusicPlayObserver onStart id:${id} , errCode:${errorCode}"); + } ,onPlayProgress: (int id, int curPtsMSm, int durationMS){ + debugPrint("TRTCCloudExample TXMusicPlayObserver onPlayProgress id:${id} , curPtsMSm:${curPtsMSm} , durationMS:${durationMS}"); + }, onComplete: (int id, int errorCode){ + debugPrint("TRTCCloudExample TXMusicPlayObserver onComplete id:${id} , errCode:${errorCode}"); + }) ); + print("TRTCCloudExample ------------------------ ${musicPath}"); + txAudioEffectManager.startPlayMusic(AudioMusicParam( + id: 1, + path: musicPath)); + } + ), + ApiCheckerButton( + methodName: 'pausePlayMusic', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + ], + callApi: (params) { + txAudioEffectManager.pausePlayMusic(params['id']); + } + ), + ApiCheckerButton( + methodName: 'resumePlayMusic', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + ], + callApi: (params) { + txAudioEffectManager.resumePlayMusic(params['id']); + } + ), + ApiCheckerButton( + methodName: 'stopPlayMusic', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + ], + callApi: (params) { + txAudioEffectManager.stopPlayMusic(params['id']); + } + ), + ApiCheckerButton( + methodName: 'setAllMusicVolume', + parameters: [ + Parameter(name: 'volume', type: ParameterType.int, value: 100), + ], + callApi: (params) { + txAudioEffectManager.setAllMusicVolume(params['volume']); + } + ), + ApiCheckerButton( + methodName: 'setMusicPublishVolume', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + Parameter(name: 'volume', type: ParameterType.int, value: 100), + ], + callApi: (params) { + txAudioEffectManager.setMusicPublishVolume(params['id'], params['volume']); + } + ), + ApiCheckerButton( + methodName: 'setMusicPlayoutVolume', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + Parameter(name: 'volume', type: ParameterType.int, value: 100), + ], + callApi: (params) { + txAudioEffectManager.setMusicPlayoutVolume(params['id'], params['volume']); + } + ), + ApiCheckerButton( + methodName: 'setMusicPitch', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + Parameter(name: 'pitch', type: ParameterType.double, value: 0.5), + ], + callApi: (params) { + txAudioEffectManager.setMusicPitch(params['id'], params['pitch']); + } + ), + ApiCheckerButton( + methodName: 'setMusicSpeedRate', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + Parameter(name: 'rate', type: ParameterType.double, value: 0.5), + ], + callApi: (params) { + txAudioEffectManager.setMusicSpeedRate(params['id'], params['rate']); + } + ), + ApiCheckerButton( + methodName: 'getMusicCurrentPosInMS', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + ], + callApi: (params) { + int result = txAudioEffectManager.getMusicCurrentPosInMS(params['id']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'getMusicDurationInMS', + parameters: [ + Parameter(name: 'path', type: ParameterType.string, value: musicPath), + ], + callApi: (params) { + int result = txAudioEffectManager.getMusicDurationInMS(params['path']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'seekMusicToPosInTime', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + Parameter(name: 'pts', type: ParameterType.int, value: 1000), + ], + callApi: (params) { + txAudioEffectManager.seekMusicToPosInTime(params['id'], params['pts']); + } + ), + ApiCheckerButton( + methodName: 'setMusicScratchSpeedRate', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + Parameter(name: 'scratchSpeedRate', type: ParameterType.double, value: 0.5), + ], + callApi: (params) { + txAudioEffectManager.setMusicScratchSpeedRate(params['id'], params['scratchSpeedRate']); + } + ), + ApiCheckerButton( + methodName: 'setPreloadObserver', + parameters: [], + callApi: (params) { + txAudioEffectManager.setPreloadObserver( + TXMusicPreloadObserver( + onLoadProgress: (id, progress) { + debugPrint("TXMusicPreloadObserver onLoadProgress id:${id} , progress:${progress}"); + }, + onLoadError: (id, errCode) { + debugPrint("TXMusicPreloadObserver onLoadError id:${id} , errCode:${errCode}"); + }, + )); + } + ), + ApiCheckerButton( + methodName: 'preloadMusic', + parameters: [], + callApi: (params) { + txAudioEffectManager.setPreloadObserver(TXMusicPreloadObserver(onLoadProgress: (int id, int progress){ + debugPrint("TRTCCloudExample TXMusicPreloadObserver onLoadProgress id:${id} , progress:${progress}"); + }, onLoadError: (int id, int progress){ + debugPrint("TRTCCloudExample TXMusicPreloadObserver onLoadError id:${id} , errCode:${progress}"); + })); + txAudioEffectManager.preloadMusic(AudioMusicParam( + id: 1, + path: musicPath)); + } + ), + ApiCheckerButton( + methodName: 'getMusicTrackCount', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + ], + callApi: (params) { + int result = txAudioEffectManager.getMusicTrackCount(params['id']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'setMusicTrack', + parameters: [ + Parameter(name: 'id', type: ParameterType.int, value: 1), + Parameter(name: 'track', type: ParameterType.int, value: 1), + ], + callApi: (params) { + txAudioEffectManager.setMusicTrack(params['id'], params['track']); + } + ), + ], + ); } - setMixConfigNull() { - trtcCloud.setMixTranscodingConfig(null); + ListView _testTXDevice() { + return ListView( + children: [ + ApiCheckerButton( + methodName: 'isFrontCamera', + parameters: [], + callApi: (params) { + bool isFront = txDeviceManager.isFrontCamera(); + MeetingTool.toast(isFront.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'switchCamera', + parameters: [ + Parameter(name: 'frontCamera', type: ParameterType.bool, value: true), + ], + callApi: (params) { + txDeviceManager.switchCamera(params['frontCamera']); + } + ), + ApiCheckerButton( + methodName: 'getCameraZoomMaxRatio', + parameters: [], + callApi: (params) { + double result = txDeviceManager.getCameraZoomMaxRatio(); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'setCameraZoomRatio', + parameters: [ + Parameter(name: 'ratio', type: ParameterType.double, value: 0.5), + ], + callApi: (params) { + int result = txDeviceManager.setCameraZoomRatio(params['ratio']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'isAutoFocusEnabled', + parameters: [], + callApi: (params) { + bool result = txDeviceManager.isAutoFocusEnabled(); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'enableCameraAutoFocus', + parameters: [ + Parameter(name: 'enabled', type: ParameterType.bool, value: true), + ], + callApi: (params) { + int result = txDeviceManager.enableCameraAutoFocus(params['enabled']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'setCameraFocusPosition', + parameters: [ + Parameter(name: 'x', type: ParameterType.double, value: 0.5), + Parameter(name: 'y', type: ParameterType.double, value: 0.5), + ], + callApi: (params) { + int result = txDeviceManager.setCameraFocusPosition(params['x'], params['y']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'enableCameraTorch', + parameters: [ + Parameter(name: 'enabled', type: ParameterType.bool, value: true), + ], + callApi: (params) { + int result = txDeviceManager.enableCameraTorch(params['enabled']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'setAudioRoute', + parameters: [ + Parameter(name: 'route', type: ParameterType.tEnum, value: TXAudioRoute.earpiece), + ], + extString: 'earpiece', + callApi: (params) { + int result = txDeviceManager.setAudioRoute(params['route']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'setAudioRoute', + parameters: [ + Parameter(name: 'route', type: ParameterType.tEnum, value: TXAudioRoute.speakerPhone), + ], + extString: 'speakerPhone', + callApi: (params) { + int result = txDeviceManager.setAudioRoute(params['route']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'getDevicesList', + parameters: [ + Parameter(name: 'type', type: ParameterType.tEnum, value: TXMediaDeviceType.camera), + ], + callApi: (params) { + List list = txDeviceManager.getDevicesList(params['type']); + _showList(list); + } + ), + ApiCheckerButton( + methodName: 'setCurrentDevice', + parameters: [ + Parameter(name: 'type', type: ParameterType.tEnum, value: TXMediaDeviceType.camera), + Parameter(name: 'deviceId', type: ParameterType.string, value: '123'), + ], + callApi: (params) { + int result = txDeviceManager.setCurrentDevice(params['type'], params['deviceId']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'getCurrentDevice', + parameters: [ + Parameter(name: 'type', type: ParameterType.tEnum, value: TXMediaDeviceType.camera), + ], + callApi: (params) { + TXDeviceInfo result = txDeviceManager.getCurrentDevice(params['type']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'setCurrentDeviceVolume', + parameters: [ + Parameter(name: 'type', type: ParameterType.tEnum, value: TXMediaDeviceType.camera), + Parameter(name: 'volume', type: ParameterType.int, value: 100), + ], + callApi: (params) { + int result = txDeviceManager.setCurrentDeviceVolume(params['type'], params['volume']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'getCurrentDeviceVolume', + parameters: [ + Parameter(name: 'type', type: ParameterType.tEnum, value: TXMediaDeviceType.camera), + ], + callApi: (params) { + int result = txDeviceManager.getCurrentDeviceVolume(params['type']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'setCurrentDeviceMute', + parameters: [ + Parameter(name: 'type', type: ParameterType.tEnum, value: TXMediaDeviceType.camera), + Parameter(name: 'mute', type: ParameterType.bool, value: true), + ], + callApi: (params) { + int result = txDeviceManager.setCurrentDeviceMute(params['type'], params['mute']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'getCurrentDeviceMute', + parameters: [ + Parameter(name: 'type', type: ParameterType.tEnum, value: TXMediaDeviceType.camera), + ], + callApi: (params) { + bool result = txDeviceManager.getCurrentDeviceMute(params['type']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'enableFollowingDefaultAudioDevice', + parameters: [ + Parameter(name: 'type', type: ParameterType.tEnum, value: TXMediaDeviceType.camera), + Parameter(name: 'enable', type: ParameterType.bool, value: true), + ], + callApi: (params) { + int result = txDeviceManager.enableFollowingDefaultAudioDevice(params['type'], params['enable']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'startCameraDeviceTest', + parameters: [ + Parameter(name: 'viewId', type: ParameterType.int, value: 0), + ], + callApi: (params) { + int result = txDeviceManager.startCameraDeviceTest(params['viewId']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'stopCameraDeviceTest', + parameters: [], + callApi: (params) { + txDeviceManager.stopCameraDeviceTest(); + } + ), + ApiCheckerButton( + methodName: 'startMicDeviceTest', + parameters: [ + Parameter(name: 'interval', type: ParameterType.int, value: 10), + ], + callApi: (params) { + int result = txDeviceManager.startMicDeviceTest(params['interval']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'startMicDeviceTest', + parameters: [ + Parameter(name: 'interval', type: ParameterType.int, value: 10), + Parameter(name: 'playback', type: ParameterType.bool, value: false) + ], + callApi: (params) { + int result = txDeviceManager.startMicDeviceTestAndPlayback(params['interval'], params['playback']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'stopMicDeviceTest', + parameters: [], + callApi: (params) { + txDeviceManager.stopMicDeviceTest(); + } + ), + ApiCheckerButton( + methodName: 'startSpeakerDeviceTest', + parameters: [ + Parameter(name: 'filePath', type: ParameterType.string, value: ''), + ], + callApi: (params) { + int result = txDeviceManager.startSpeakerDeviceTest(params['filePath']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'stopSpeakerDeviceTest', + parameters: [], + callApi: (params) { + txDeviceManager.stopSpeakerDeviceTest(); + } + ), + ApiCheckerButton( + methodName: 'setApplicationPlayVolume', + parameters: [ + Parameter(name: 'volume', type: ParameterType.int, value: 100), + ], + callApi: (params) { + int result = txDeviceManager.setApplicationPlayVolume(params['volume']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'getApplicationPlayVolume', + parameters: [], + callApi: (params) { + int result = txDeviceManager.getApplicationPlayVolume(); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'setApplicationMuteState', + parameters: [ + Parameter(name: 'mute', type: ParameterType.bool, value: false), + ], + callApi: (params) { + int result = txDeviceManager.setApplicationMuteState(params['mute']); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'getApplicationMuteState', + parameters: [], + callApi: (params) { + int result = txDeviceManager.getApplicationMuteState(); + MeetingTool.toast(result.toString(), context); + } + ), + ApiCheckerButton( + methodName: 'setCameraCaptureParam', + parameters: [ + Parameter(name: 'param', type: ParameterType.tClass, value: TXCameraCaptureParam()), + ], + callApi: (params) { + txDeviceManager.setCameraCaptureParam(params['param']); + } + ), + ApiCheckerButton( + methodName: 'setDeviceObserver', + parameters: [], + callApi: (params) { + txDeviceManager.setDeviceObserver(null); + } + ), + ] + ); } TRTCPublishTarget _getTRTCPublishTarget() { @@ -203,7 +1441,7 @@ class TestPageState extends State { mixStreamIdentity.userId = '999'; TRTCPublishTarget target = TRTCPublishTarget(); - target.mode = TRTCPublishMode.TRTCPublishMixStreamToRoom; + target.mode = TRTCPublishMode.mixStreamToRoom; target.cdnUrlList = [url, url]; target.mixStreamIdentity = mixStreamIdentity; return target; @@ -231,1256 +1469,58 @@ class TestPageState extends State { TRTCVideoLayout layout = TRTCVideoLayout(); layout.rect = - Rect(originX: 1111, originY: 2222, sizeWidth: 3333, sizeHeight: 4444); + TRTCRect(left: 1, top: 2, right: 3, bottom: 4); layout.zOrder = 5555; - layout.fillMode = TRTCVideoFillMode.TRTCVideoFillMode_Fit; + layout.fillMode = TRTCVideoFillMode.fit; layout.backgroundColor = 6666; - layout.placeHolderImage = 'image'; + layout.placeHolderImage = Uint8List.fromList([1, 2, 3, 4]); layout.fixedVideoUser = mixStreamIdentity; - layout.fixedVideoStreamType = TRTCVideoStreamType.TRTCVideoStreamTypeSub; + layout.fixedVideoStreamType = TRTCVideoStreamType.sub; TRTCWatermark watermark = TRTCWatermark(); watermark.watermarkUrl = 'www.11111.com'; - watermark.rect = Rect(originX: 9, originY: 8, sizeWidth: 7, sizeHeight: 6); + watermark.rect = TRTCRect(left: 1, top: 2, right: 3, bottom: 4); watermark.zOrder = 8888; TRTCStreamMixingConfig config = TRTCStreamMixingConfig(); config.backgroundColor = 111111; - config.backgroundImage = 'Image'; + config.backgroundImage = Uint8List.fromList([1, 2, 3, 4]); config.videoLayoutList = [layout, layout]; config.audioMixUserList = [mixStreamIdentity, mixStreamIdentity]; config.watermarkList = [watermark, watermark]; return config; } - @override - Widget build(BuildContext context) { - return DefaultTabController( - length: 6, - child: Scaffold( - resizeToAvoidBottomInset: false, - appBar: AppBar( - title: const Text('Test API'), - centerTitle: true, - elevation: 0, - bottom: TabBar(tabs: [ - Tab(text: 'Main interface'), - Tab(text: 'Music interface'), - Tab(text: 'Video interface'), - Tab(text: 'Beauty & equipment'), - Tab(text: 'CDN'), - Tab(text: 'Audio callback') - ]), - ), - body: TabBarView(children: [ - ListView( - children: [ - TextButton( - onPressed: () async { - trtcCloud.updateRemoteView('345', 0, 0); - trtcCloud.updateLocalView(1); - }, - child: Text('changView1'), - ), - TextButton( - onPressed: () async { - trtcCloud.updateLocalView(0); - trtcCloud.updateRemoteView('345', 0, 1); - }, - child: Text('changeview2'), - ), - TextButton( - onPressed: () async { - trtcCloud.startSpeedTest( - GenerateTestUserSig.sdkAppId, - userInfo.userId, - await GenerateTestUserSig.genTestSig( - userInfo.userId)); - }, - child: Text('startSpeedTest'), - ), - TextButton( - onPressed: () async { - trtcCloud.stopSpeedTest(); - }, - child: Text('stopSpeedTest'), - ), - TextButton( - onPressed: () async { - trtcCloud.switchRole(TRTCCloudDef.TRTCRoleAudience); - }, - child: Text('switchRole-audience'), - ), - TextButton( - onPressed: () async { - trtcCloud.switchRole(TRTCCloudDef.TRTCRoleAnchor); - }, - child: Text('switchRole-anchor'), - ), - TextButton( - onPressed: () async { - var object = new Map(); - object['roomId'] = 155; - object['userId'] = '345'; - trtcCloud.connectOtherRoom(jsonEncode(object)); - }, - child: Text('connectOtherRoom-room-155-user-345'), - ), - TextButton( - onPressed: () async { - trtcCloud.disconnectOtherRoom(); - }, - child: Text('disconnectOtherRoom'), - ), - TextButton( - onPressed: () async { - trtcCloud.switchRoom(TRTCSwitchRoomConfig( - roomId: 1546, - userSig: await GenerateTestUserSig.genTestSig( - userInfo.userId))); - }, - child: Text('switchRoom-1546'), - ), - TextButton( - onPressed: () async { - trtcCloud.muteLocalAudio(true); - }, - child: Text('muteLocalAudio-true'), - ), - TextButton( - onPressed: () async { - trtcCloud.muteLocalAudio(false); - }, - child: Text('muteLocalAudio-false'), - ), - TextButton( - onPressed: () async { - trtcCloud.startPublishCDNStream(TRTCPublishCDNParam( - appId: 112, - bizId: 233, - url: 'https://www.baidu.com')); - }, - child: Text('startPublishCDNStream'), - ), - TextButton( - onPressed: () async { - trtcCloud.stopPublishCDNStream(); - }, - child: Text('stopPublishCDNStream'), - ), - TextButton( - onPressed: () async { - bool? value = await trtcCloud.sendCustomCmdMsg( - 1, 'hello', true, true); - MeetingTool.toast(value.toString(), context); - }, - child: Text('sendCustomCmdMsg'), - ), - - // TextButton( - // onPressed: () async { - // trtcCloud.setLogCompressEnabled(false); - // }, - // child: Text('setLogCompressEnabled-false'), - // ), - // TextButton( - // onPressed: () async { - // trtcCloud.setLogCompressEnabled(true); - // }, - // child: Text('setLogCompressEnabled-true'), - // ), - // TextButton( - // onPressed: () async { - // trtcCloud.setLogDirPath( - // '/sdcard/Android/data/com.tencent.trtc_demo/files/log/tencent/clavietest'); - // }, - // child: Text('setLogDirPath-android-clavietest'), - // ), - // TextButton( - // onPressed: () async { - // Directory appDocDir = - // await getApplicationDocumentsDirectory(); - // trtcCloud.setLogDirPath(appDocDir.path + '/clavietest'); - // }, - // child: Text('setLogDirPath-ios-clavietest'), - // ), - TextButton( - onPressed: () async { - trtcCloud.startPublishing('clavie_stream_001', - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG); - }, - child: Text('startPublishing-clavie_stream_001'), - ), - TextButton( - onPressed: () async { - trtcCloud.stopPublishing(); - }, - child: Text('stopPublishing'), - ), - TextButton( - onPressed: () async { - trtcCloud.setRemoteAudioVolume('345', 100); - }, - child: Text('setRemoteAudioVolume-100'), - ), - TextButton( - onPressed: () async { - trtcCloud.setRemoteAudioVolume('345', 0); - }, - child: Text('setRemoteAudioVolume-0'), - ), - TextButton( - onPressed: () async { - trtcCloud.setAudioCaptureVolume(70); - }, - child: Text('setAudioCaptureVolume-70'), - ), - TextButton( - onPressed: () async { - int? volume = await trtcCloud.getAudioCaptureVolume(); - MeetingTool.toast(volume.toString(), context); - }, - child: Text('getAudioCaptureVolume'), - ), - TextButton( - onPressed: () async { - trtcCloud.setAudioPlayoutVolume(80); - }, - child: Text('setAudioPlayoutVolume-80'), - ), - TextButton( - onPressed: () async { - int? volume = await trtcCloud.getAudioPlayoutVolume(); - MeetingTool.toast(volume.toString(), context); - }, - child: Text('getAudioPlayoutVolume'), - ), - TextButton( - onPressed: () async { - trtcCloud.setNetworkQosParam( - TRTCNetworkQosParam(preference: 1)); - }, - child: Text('setNetworkQosParam-Keep a clear'), - ), - TextButton( - onPressed: () async { - trtcCloud.setNetworkQosParam( - TRTCNetworkQosParam(preference: 2)); - }, - child: Text('setNetworkQosParam-Sustainable'), - ), - TextButton( - onPressed: () async { - trtcCloud.enableAudioVolumeEvaluation(2000); - }, - child: Text('enableAudioVolumeEvaluation-Volume every 2S prompt'), - ), - TextButton( - onPressed: () async { - trtcCloud.enableAudioVolumeEvaluation(0); - }, - child: Text('enableAudioVolumeEvaluation-0'), - ), - !kIsWeb && Platform.isAndroid - ? TextButton( - onPressed: () async { - int? result = await trtcCloud.startAudioRecording( - TRTCAudioRecordingParams( - filePath: - '/sdcard/Android/data/com.tencent.trtc_demo/files/audio.wav')); - MeetingTool.toast(result.toString(), context); - }, - child: Text('startAudioRecording-Android'), - ) - : TextButton( - onPressed: () async { - Directory appDocDir = - await getApplicationDocumentsDirectory(); - int? result = await trtcCloud.startAudioRecording( - TRTCAudioRecordingParams( - filePath: appDocDir.path + '/audio.aac')); - MeetingTool.toast(result.toString(), context); - }, - child: Text('startAudioRecording-ios'), - ), - TextButton( - onPressed: () async { - int? result = await trtcCloud.startAudioRecording( - TRTCAudioRecordingParams( - filePath: 'E:\\audio.aac')); - MeetingTool.toast(result.toString(), context); - }, - child: Text('startAudioRecording-windows(E drive)'), - ), - TextButton( - onPressed: () async { - trtcCloud.stopAudioRecording(); - }, - child: Text('stopAudioRecording'), - ), - TextButton( - onPressed: () async { - Directory? appDocDir; - if(Platform.isAndroid) { - appDocDir = await getExternalStorageDirectory(); - } else { - appDocDir = await getApplicationDocumentsDirectory(); - } - await trtcCloud.startLocalRecording( - TRTCLocalRecordingParams( - recordType: TRTCCloudDef.TRTCRecordTypeBoth, - interval: 2000, - maxDurationPerFile: 20000, - filePath: - '${appDocDir?.path}/isolocalVideo.mp4')); - MeetingTool.toast('${appDocDir?.path}/isolocalVideo.mp4 Start Recording!', context); - }, - child: Text('startLocalRecording-Android&ios'), - ), - TextButton( - onPressed: () async { - await trtcCloud.startLocalRecording( - TRTCLocalRecordingParams( - recordType: TRTCCloudDef.TRTCRecordTypeAudio, - interval: -1, - filePath: 'E:\\videoTest.mp4')); - }, - child: Text('startLocalRecording-windows(E drive)'), - ), - TextButton( - onPressed: () async { - trtcCloud.stopLocalRecording(); - }, - child: Text('stopLocalRecording'), - ), - TextButton( - onPressed: () async { - String? version = await trtcCloud.getSDKVersion(); - MeetingTool.toast(version, context); - }, - child: Text('getSDKVersion'), - ), - TextButton( - onPressed: () async { - trtcCloud.startSystemAudioLoopback(); - }, - child: Text('startSystemAudioLoopback'), - ), - TextButton( - onPressed: () async { - trtcCloud.stopSystemAudioLoopback(); - }, - child: Text('stopSystemAudioLoopback'), - ), - TextButton( - onPressed: () async { - trtcCloud.setSystemAudioLoopbackVolume(50); - }, - child: Text('setSystemAudioLoopbackVolume 50'), - ), - TextButton( - onPressed: () async { - trtcCloud.setSystemAudioLoopbackVolume(100); - }, - child: Text('setSystemAudioLoopbackVolume 100'), - ), - TextButton( - onPressed: () async { - // await trtcCloud.callExperimentalAPI( - // jsonEncode({"name": "clavie"})); - trtcCloud.callExperimentalAPI(jsonEncode({ - "api": "setViewBackgroundColor", - "params": {"backgroundColor": "0x00000000"} - })); - }, - child: Text('callExperimentalAPI'), - ), - ], - ), - ListView( - children: [ - // TextButton( - // onPressed: () async { - // txAudioManager.enableVoiceEarMonitor(true); - // }, - // child: Text('enableVoiceEarMonitor-true'), - // ), - // TextButton( - // onPressed: () async { - // txAudioManager.enableVoiceEarMonitor(false); - // }, - // child: Text('enableVoiceEarMonitor-flase'), - // ), - // TextButton( - // onPressed: () async { - // txAudioManager.setVoiceEarMonitorVolume(0); - // }, - // child: Text('setVoiceEarMonitorVolume-0'), - // ), - // TextButton( - // onPressed: () async { - // txAudioManager.setVoiceEarMonitorVolume(100); - // }, - // child: Text('setVoiceEarMonitorVolume-100'), - // ), - TextButton( - onPressed: () async { - txAudioManager.setVoiceReverbType( - TXVoiceReverbType.TXLiveVoiceReverbType_4); - }, - child: Text('setVoiceReverbType-Low'), - ), - TextButton( - onPressed: () async { - txAudioManager.setVoiceReverbType( - TXVoiceReverbType.TXLiveVoiceReverbType_1); - }, - child: Text('setVoiceReverbType-KTV'), - ), - TextButton( - onPressed: () async { - txAudioManager.setVoiceReverbType( - TXVoiceReverbType.TXLiveVoiceReverbType_5); - }, - child: Text('setVoiceReverbType-Brilliant'), - ), - TextButton( - onPressed: () async { - txAudioManager.setVoiceReverbType( - TXVoiceReverbType.TXLiveVoiceReverbType_7); - }, - child: Text('setVoiceReverbType-magnetic'), - ), - // TextButton( - // onPressed: () async { - // txAudioManager.setVoiceChangerType( - // TXVoiceChangerType.TXLiveVoiceChangerType_2); - // }, - // child: Text('setVoiceChangerType-Loli'), - // ), - // TextButton( - // onPressed: () async { - // txAudioManager.setVoiceChangerType( - // TXVoiceChangerType.TXLiveVoiceChangerType_4); - // }, - // child: Text('setVoiceChangerType-Heavy metal'), - // ), - // TextButton( - // onPressed: () async { - // txAudioManager.setVoiceChangerType( - // TXVoiceChangerType.TXLiveVoiceChangerType_0); - // }, - // child: Text('setVoiceChangerType-Turn off'), - // ), - TextButton( - onPressed: () async { - txAudioManager.setVoiceCaptureVolume(0); - }, - child: Text('setVoiceCaptureVolume-0'), - ), - TextButton( - onPressed: () async { - txAudioManager.setVoiceCaptureVolume(100); - }, - child: Text('setVoiceCaptureVolume-100'), - ), - TextButton( - onPressed: () async { - bool? musidTrue = await txAudioManager.startPlayMusic( - AudioMusicParam( - id: 223, - publish: true, - path: kIsWeb - ? './media/daoxiang.mp3' - : await MeetingTool.copyAssetToLocal( - 'media/daoxiang.mp3'))); - MeetingTool.toast(musidTrue.toString(), context); - }, - child: Text('startPlayMusic'), - ), - TextButton( - onPressed: () async { - txAudioManager.pausePlayMusic(223); - }, - child: Text('pausePlayMusic'), - ), - TextButton( - onPressed: () async { - txAudioManager.resumePlayMusic(223); - }, - child: Text('resumePlayMusic'), - ), - TextButton( - onPressed: () async { - txAudioManager.stopPlayMusic(223); - }, - child: Text('stopPlayMusic'), - ), - TextButton( - onPressed: () async { - txAudioManager.setMusicPlayoutVolume(223, 0); - }, - child: Text('setMusicPlayoutVolume-0'), - ), - TextButton( - onPressed: () async { - txAudioManager.setMusicPlayoutVolume(223, 100); - }, - child: Text('setMusicPlayoutVolume-100'), - ), - TextButton( - onPressed: () async { - txAudioManager.setMusicPublishVolume(223, 0); - }, - child: Text('setMusicPublishVolume-0'), - ), - TextButton( - onPressed: () async { - txAudioManager.setMusicPublishVolume(223, 100); - }, - child: Text('setMusicPublishVolume-100'), - ), - TextButton( - onPressed: () async { - txAudioManager.setAllMusicVolume(0); - }, - child: Text('setAllMusicVolume-0'), - ), - TextButton( - onPressed: () async { - txAudioManager.setAllMusicVolume(100); - }, - child: Text('setAllMusicVolume-100'), - ), - TextButton( - onPressed: () async { - txAudioManager.setMusicPitch(223, -1); - }, - child: Text('setMusicPitch- (-1)'), - ), - TextButton( - onPressed: () async { - txAudioManager.setMusicPitch(223, 1); - }, - child: Text('setMusicPitch- 1'), - ), - TextButton( - onPressed: () async { - txAudioManager.setMusicSpeedRate(223, 0.5); - }, - child: Text('setMusicSpeedRate- 0.5'), - ), - TextButton( - onPressed: () async { - txAudioManager.setMusicSpeedRate(223, 2); - }, - child: Text('setMusicSpeedRate- 2'), - ), - TextButton( - onPressed: () async { - int? time = - await txAudioManager.getMusicCurrentPosInMS(223); - MeetingTool.toast(time.toString(), context); - }, - child: Text('getMusicCurrentPosInMS'), - ), - TextButton( - onPressed: () async { - txAudioManager.seekMusicToPosInMS(223, 220000); - }, - child: Text('seekMusicToPosInMS-220000'), - ), - TextButton( - onPressed: () async { - int? time = await txAudioManager.getMusicDurationInMS( - 'https://imgcache.qq.com/operation/dianshi/other/daoxiang.72c46ee085f15dc72603b0ba154409879cbeb15e.mp3'); - print('==time=' + time.toString()); - MeetingTool.toast(time.toString(), context); - }, - child: Text('getMusicDurationInMS-Get time for a long time'), - ), - ], - ), - ListView(children: [ - TextButton( - onPressed: () async { - bool? value = await trtcCloud.sendSEIMsg('clavie', 2); - MeetingTool.toast(value.toString(), context); - }, - child: Text('sendSEIMsg'), - ), - TextButton( - onPressed: () async { - trtcCloud.stopLocalPreview(); - }, - child: Text('stopLocalPreview-Stop local video'), - ), - TextButton( - onPressed: () async { - trtcCloud.stopRemoteView( - '345', TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL); - }, - child: Text('stopRemoteView-Video of remote ID = 345'), - ), - TextButton( - onPressed: () async { - trtcCloud.stopRemoteView( - '345', TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB); - }, - child: Text('stopRemoteView-The auxiliary flow of the remote ID = 345'), - ), - TextButton( - onPressed: () async { - setMixConfig(); - }, - child: Text('setMixTranscodingConfig-leftright'), - ), - TextButton( - onPressed: () async { - setMixConfigInPicture(); - }, - child: Text('setMixTranscodingConfig-picture'), - ), - TextButton( - onPressed: () async { - setMixConfigManual(); - }, - child: Text('setMixTranscodingConfig-manual'), - ), - TextButton( - onPressed: () async { - setMixConfigNull(); - }, - child: Text('setMixTranscodingConfig-null'), - ), - TextButton( - onPressed: () async { - trtcCloud.muteLocalVideo(true); - }, - child: Text('muteLocalVideo-true'), - ), - TextButton( - onPressed: () async { - trtcCloud.muteLocalVideo(false); - }, - child: Text('muteLocalVideo-false'), - ), - TextButton( - onPressed: () async { - trtcCloud.setVideoMuteImage( - 'images/watermark_img.png', 10); - }, - child: Text('setVideoMuteImage-watermark_img'), - ), - TextButton( - onPressed: () async { - trtcCloud.setVideoMuteImage(null, 10); - }, - child: Text('setVideoMuteImage-null'), - ), - TextButton( - onPressed: () async { - trtcCloud.muteRemoteVideoStream('345', true); - }, - child: Text('muteRemoteVideoStream-true-Distant user ID345'), - ), - TextButton( - onPressed: () async { - trtcCloud.muteRemoteVideoStream('345', false); - }, - child: Text('muteRemoteVideoStream-false-Distant user ID345'), - ), - TextButton( - onPressed: () async { - trtcCloud.muteAllRemoteVideoStreams(true); - }, - child: Text('muteAllRemoteVideoStreams-true'), - ), - TextButton( - onPressed: () async { - trtcCloud.muteAllRemoteVideoStreams(false); - }, - child: Text('muteAllRemoteVideoStreams-false'), - ), - TextButton( - onPressed: () async { - trtcCloud.setLocalRenderParams(TRTCRenderParams( - rotation: TRTCCloudDef.TRTC_VIDEO_ROTATION_90, - fillMode: TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT, - mirrorType: - TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE)); - }, - child: Text('setLocalRenderParams-90 degrees spin'), - ), - TextButton( - onPressed: () async { - trtcCloud.setLocalRenderParams(TRTCRenderParams( - rotation: TRTCCloudDef.TRTC_VIDEO_ROTATION_0, - fillMode: TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL, - mirrorType: - TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO)); - }, - child: Text('setLocalRenderParams-recover'), - ), - TextButton( - onPressed: () async { - trtcCloud.setRemoteRenderParams( - '345', - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, - TRTCRenderParams( - rotation: TRTCCloudDef.TRTC_VIDEO_ROTATION_90, - fillMode: TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT, - mirrorType: - TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE)); - }, - child: Text('setRemoteRenderParams-Small picture 90 degrees-Distant user ID345'), - ), - TextButton( - onPressed: () async { - trtcCloud.setRemoteRenderParams( - '345', - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, - TRTCRenderParams( - rotation: TRTCCloudDef.TRTC_VIDEO_ROTATION_180, - fillMode: TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT, - mirrorType: - TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE)); - }, - child: Text('setRemoteRenderParams-Small picture 180 degrees-Distant user ID345'), - ), - TextButton( - onPressed: () async { - trtcCloud.setRemoteRenderParams( - '345', - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, - TRTCRenderParams( - rotation: TRTCCloudDef.TRTC_VIDEO_ROTATION_270, - fillMode: TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT, - mirrorType: - TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE)); - }, - child: Text('setRemoteRenderParams-Small picture 270 degrees-Distant user ID345'), - ), - TextButton( - onPressed: () async { - trtcCloud.setRemoteRenderParams( - '345', - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL, - TRTCRenderParams( - rotation: TRTCCloudDef.TRTC_VIDEO_ROTATION_0, - fillMode: TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT, - mirrorType: - TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE)); - }, - child: Text('setRemoteRenderParams-Small picture recovery-Distant user ID345'), - ), - TextButton( - onPressed: () async { - trtcCloud.setRemoteRenderParams( - '345', - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SUB, - TRTCRenderParams( - rotation: TRTCCloudDef.TRTC_VIDEO_ROTATION_90, - fillMode: - TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL, - mirrorType: - TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO)); - }, - child: Text('setRemoteRenderParams-Auxiliary 90 degrees-Distant user ID345'), - ), - TextButton( - onPressed: () async { - trtcCloud.setVideoEncoderRotation( - TRTCCloudDef.TRTC_VIDEO_ROTATION_180); - }, - child: Text('setVideoEncoderRotation-180'), - ), - TextButton( - onPressed: () async { - trtcCloud.setVideoEncoderRotation( - TRTCCloudDef.TRTC_VIDEO_ROTATION_0); - }, - child: Text('setVideoEncoderRotation-0'), - ), - TextButton( - onPressed: () async { - trtcCloud.setVideoEncoderMirror(true); - }, - child: Text('setVideoEncoderMirror-true'), - ), - TextButton( - onPressed: () async { - trtcCloud.setVideoEncoderMirror(false); - }, - child: Text('setVideoEncoderMirror-false'), - ), - TextButton( - onPressed: () async { - trtcCloud.setGSensorMode( - TRTCCloudDef.TRTC_GSENSOR_MODE_UIAUTOLAYOUT); - }, - child: Text('setGSensorMode-Open the gravity induction'), - ), - TextButton( - onPressed: () async { - trtcCloud.setGSensorMode( - TRTCCloudDef.TRTC_GSENSOR_MODE_DISABLE); - }, - child: Text('setGSensorMode-Turn off gravity sensing'), - ), - TextButton( - onPressed: () async { - int? value = await trtcCloud.enableEncSmallVideoStream( - true, TRTCVideoEncParam(videoFps: 5)); - print('==trtc value' + value.toString()); - MeetingTool.toast(value.toString(), context); - }, - child: Text('enableEncSmallVideoStream-Turn on dual -way coding'), - ), - TextButton( - onPressed: () async { - int? value = await trtcCloud.enableEncSmallVideoStream( - false, TRTCVideoEncParam(videoFps: 5)); - print('==trtc value' + value.toString()); - MeetingTool.toast(value.toString(), context); - }, - child: Text('enableEncSmallVideoStream-Turn off dual -way coding'), - ), - TextButton( - onPressed: () async { - trtcCloud.setRemoteVideoStreamType( - '345', TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_SMALL); - }, - child: Text('setRemoteVideoStreamType-Watch the small picture of 345'), - ), - TextButton( - onPressed: () async { - trtcCloud.setRemoteVideoStreamType( - '345', TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG); - }, - child: Text('setRemoteVideoStreamType-Watch the big picture of 345'), - ), - TextButton( - onPressed: () async { - trtcCloud.snapshotVideo( - null, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, - 0, - '/sdcard/Android/data/com.tencent.trtc_demo/files/asw.jpg'); - }, - child: Text('snapshotVideo-Android'), - ), - TextButton( - onPressed: () async { - Directory appDocDir = - await getApplicationDocumentsDirectory(); - trtcCloud.snapshotVideo( - null, - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, - 0, - appDocDir.path + '/test8.jpg'); - }, - child: Text('snapshotVideo-ios-self'), - ), - TextButton( - onPressed: () async { - Directory appDocDir = - await getApplicationDocumentsDirectory(); - trtcCloud.snapshotVideo( - '2536', - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, - 0, - appDocDir.path + '/test7.jpg'); - }, - child: Text('snapshotVideo-ios'), - ), - TextButton( - onPressed: () async { - trtcCloud.setWatermark( - 'images/watermark_img.png', - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, - 0.1, - 0.3, - 0.2); - }, - child: Text('setWatermark-Local picture'), - ), - TextButton( - onPressed: () async { - trtcCloud.setWatermark( - '/sdcard/Android/data/com.tencent.trtc_demo/files/asw.jpg', - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, - 0.1, - 0.3, - 0.2); - }, - child: Text('setWatermark-Absolute path'), - ), - TextButton( - onPressed: () async { - trtcCloud.setWatermark( - 'https://main.qcloudimg.com/raw/3f9146cacab4a019b0cc44b8b22b6a38.png', - TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, - 0.1, - 0.3, - 0.2); - }, - child: Text('setWatermark-Web image'), - ), - TextButton( - onPressed: () async { - trtcCloud.showDebugView(2); - }, - child: Text('showDebugView-show'), + _showList(List list) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: Text('Current Parameters'), + content: SingleChildScrollView( + child: ListBody( + children: list.map((source) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 4.0), + child: Text( + source.toString(), // 将每个源转换为字符串 + style: TextStyle(fontSize: 20), + ), + ); + }).toList(), ), + ), + actions: [ TextButton( - onPressed: () async { - trtcCloud.showDebugView(0); + child: Text('Close'), + onPressed: () { + Navigator.of(context).pop(); }, - child: Text('showDebugView-close'), ), - ]), - ListView( - children: [ - TextButton( - onPressed: () async { - Map? data = await txDeviceManager - .getDevicesList(TRTCCloudDef.TXMediaDeviceTypeMic); - MeetingTool.toast( - "Number of equipment:" + data!['count'].toString(), context); - print(data); - }, - child: Text('getDevicesList'), - ), - TextButton( - onPressed: () async { - Map? data = await txDeviceManager - .getDevicesList(TRTCCloudDef.TXMediaDeviceTypeMic); - int? result = await txDeviceManager.setCurrentDevice( - TRTCCloudDef.TXMediaDeviceTypeMic, - data!['deviceList'][0]['deviceId']); - MeetingTool.toast("error code:" + result.toString(), context); - }, - child: Text('setCurrentDevice'), - ), - TextButton( - onPressed: () async { - Map? data = await txDeviceManager.getCurrentDevice( - TRTCCloudDef.TXMediaDeviceTypeMic); - MeetingTool.toast( - "Equipment ID:" + data!['deviceId'].toString(), context); - print(data); - }, - child: Text('getCurrentDevice'), - ), - TextButton( - onPressed: () async { - int? result = - await txDeviceManager.setCurrentDeviceVolume( - TRTCCloudDef.TXMediaDeviceTypeMic, 80); - MeetingTool.toast("error code" + result.toString(), context); - }, - child: Text('setCurrentDeviceVolume'), - ), - TextButton( - onPressed: () async { - int? result = - await txDeviceManager.getCurrentDeviceVolume( - TRTCCloudDef.TXMediaDeviceTypeMic); - MeetingTool.toast(result.toString(), context); - }, - child: Text('getCurrentDeviceVolume'), - ), - TextButton( - onPressed: () async { - int? result = - await txDeviceManager.setCurrentDeviceMute( - TRTCCloudDef.TXMediaDeviceTypeMic, true); - MeetingTool.toast("error code" + result.toString(), context); - }, - child: Text('setCurrentDeviceMute-true'), - ), - TextButton( - onPressed: () async { - int? result = - await txDeviceManager.setCurrentDeviceMute( - TRTCCloudDef.TXMediaDeviceTypeMic, false); - MeetingTool.toast("error code" + result.toString(), context); - }, - child: Text('setCurrentDeviceMute-false'), - ), - TextButton( - onPressed: () async { - bool? result = - await txDeviceManager.getCurrentDeviceMute( - TRTCCloudDef.TXMediaDeviceTypeMic); - MeetingTool.toast(result.toString(), context); - }, - child: Text('getCurrentDeviceMute'), - ), - TextButton( - onPressed: () async { - int? result = - await txDeviceManager.startMicDeviceTest(2000); - MeetingTool.toast( - "error code=: " + result.toString(), context); - }, - child: Text('startMicDeviceTest'), - ), - TextButton( - onPressed: () async { - int? result = await txDeviceManager.stopMicDeviceTest(); - MeetingTool.toast( - "error code=: " + result.toString(), context); - }, - child: Text('stopMicDeviceTest'), - ), - TextButton( - onPressed: () async { - int? result = await txDeviceManager - .startSpeakerDeviceTest("/test.aac"); - MeetingTool.toast( - "error code=: " + result.toString(), context); - }, - child: Text('startSpeakerDeviceTest'), - ), - TextButton( - onPressed: () async { - int? result = - await txDeviceManager.stopSpeakerDeviceTest(); - MeetingTool.toast( - "error code=: " + result.toString(), context); - }, - child: Text('stopSpeakerDeviceTest'), - ), - TextButton( - onPressed: () async { - int? result = - await txDeviceManager.setApplicationPlayVolume(70); - MeetingTool.toast(result.toString(), context); - }, - child: Text('setApplicationPlayVolume-70 - Windows'), - ), - TextButton( - onPressed: () async { - int? result = - await txDeviceManager.setApplicationPlayVolume(80); - MeetingTool.toast(result.toString(), context); - }, - child: Text('setApplicationPlayVolume-80 - Windows'), - ), - TextButton( - onPressed: () async { - int? result = - await txDeviceManager.getApplicationPlayVolume(); - MeetingTool.toast(result.toString(), context); - }, - child: Text('getApplicationPlayVolume - Windows'), - ), - TextButton( - onPressed: () async { - int? result = - await txDeviceManager.setApplicationMuteState(true); - MeetingTool.toast(result.toString(), context); - }, - child: Text('setApplicationMuteState-true Windows'), - ), - TextButton( - onPressed: () async { - int? result = await txDeviceManager - .setApplicationMuteState(false); - MeetingTool.toast(result.toString(), context); - }, - child: Text('setApplicationMuteState-false Windows'), - ), - TextButton( - onPressed: () async { - bool? result = - await txDeviceManager.getApplicationMuteState(); - MeetingTool.toast(result.toString(), context); - }, - child: Text('getApplicationMuteState Windows'), - ), - // TextButton( - // onPressed: () async { - // txBeautyManager.setFilter('images/watermark_img.png'); - // }, - // child: Text('setFilter-Local picture'), - // ), - // TextButton( - // onPressed: () async { - // txBeautyManager.setFilter( - // 'https://main.qcloudimg.com/raw/3f9146cacab4a019b0cc44b8b22b6a38.png'); - // }, - // child: Text('setFilter-Web image'), - // ), - // TextButton( - // onPressed: () async { - // txBeautyManager.setFilterStrength(0); - // }, - // child: Text('setFilterStrength - 0'), - // ), - // TextButton( - // onPressed: () async { - // txBeautyManager.setFilterStrength(1); - // }, - // child: Text('setFilterStrength - 1'), - // ), - // TextButton( - // onPressed: () async { - // txBeautyManager.enableSharpnessEnhancement(true); - // }, - // child: Text('enableSharpnessEnhancement - true'), - // ), - // TextButton( - // onPressed: () async { - // txBeautyManager.enableSharpnessEnhancement(false); - // }, - // child: Text('enableSharpnessEnhancement - false'), - // ), - // TextButton( - // onPressed: () async { - // bool? isFront = await txDeviceManager.isFrontCamera(); - // MeetingTool.toast(isFront.toString(), context); - // }, - // child: Text('isFrontCamera'), - // ), - // TextButton( - // onPressed: () async { - // txDeviceManager.switchCamera(false); - // }, - // child: Text('switchCamera-false'), - // ), - // TextButton( - // onPressed: () async { - // txDeviceManager.switchCamera(true); - // }, - // child: Text('switchCamera-true'), - // ), - // TextButton( - // onPressed: () async { - // double? isFront = - // await txDeviceManager.getCameraZoomMaxRatio(); - // MeetingTool.toast(isFront.toString(), context); - // }, - // child: Text('getCameraZoomMaxRatio'), - // ), - // TextButton( - // onPressed: () async { - // int? value = - // await txDeviceManager.setCameraZoomRatio(1.1); - // MeetingTool.toast(value.toString(), context); - // }, - // child: Text('setCameraZoomRatio-1'), - // ), - // TextButton( - // onPressed: () async { - // int? value = - // await txDeviceManager.setCameraZoomRatio(5.1); - // MeetingTool.toast(value.toString(), context); - // }, - // child: Text('setCameraZoomRatio-5'), - // ), - // TextButton( - // onPressed: () async { - // bool? isFront = - // await txDeviceManager.enableCameraTorch(true); - // MeetingTool.toast(isFront.toString(), context); - // }, - // child: Text('enableCameraTorch-true'), - // ), - // TextButton( - // onPressed: () async { - // bool? isFront = - // await txDeviceManager.enableCameraTorch(false); - // MeetingTool.toast(isFront.toString(), context); - // }, - // child: Text('enableCameraTorch-false'), - // ), - // TextButton( - // onPressed: () async { - // txDeviceManager.setCameraFocusPosition(0, 0); - // }, - // child: Text('setCameraFocusPosition-0,0'), - // ), - // TextButton( - // onPressed: () async { - // txDeviceManager.setCameraFocusPosition(100, 100); - // }, - // child: Text('setCameraFocusPosition-100,100'), - // ), - // TextButton( - // onPressed: () async { - // int? value = - // await txDeviceManager.enableCameraAutoFocus(true); - // MeetingTool.toast(value.toString(), context); - // }, - // child: Text('enableCameraAutoFocus-true'), - // ), - // TextButton( - // onPressed: () async { - // bool? value = - // await txDeviceManager.isAutoFocusEnabled(); - // MeetingTool.toast(value.toString(), context); - // }, - // child: Text('isAutoFocusEnabled'), - // ), - ], - ), - ListView( - children: [ - TextButton( - onPressed: () async { - trtcCloud.startPublishMediaStream( - target: _getTRTCPublishTarget(), - params: _getTRTCStreamEncoderParam(), - config: _getTRTCStreamMixingConfig()); - }, - child: Text('startPublishMediaStream'), - ), - TextButton( - onPressed: () async { - trtcCloud.updatePublishMediaStream( - taskId: '888', - target: _getTRTCPublishTarget(), - encoderParam: _getTRTCStreamEncoderParam(), - mixingConfig: _getTRTCStreamMixingConfig()); - }, - child: Text('updatePublishMediaStream'), - ), - TextButton( - onPressed: () async { - trtcCloud.stopPublishMediaStream('888'); - }, - child: Text('stopPublishMediaStream'), - ), - ], - ), - ListView( - children: [ - TextButton( - onPressed: () async { - if (_audioFrameListener == null) { - _audioFrameListener = TRTCAudioFrameListener( - onCapturedAudioFrame: (audioFrame) { - print( - 'channels: ${audioFrame.channels}, sampleRate:${audioFrame.sampleRate}, timestamp:${audioFrame.timestamp}, data:${audioFrame.data}, extraData:${audioFrame.extraData}'); - }); - trtcCloud.setAudioFrameListener(_audioFrameListener); - } else { - _audioFrameListener = null; - trtcCloud.setAudioFrameListener(_audioFrameListener); - } - setState(() {}); - }, - child: _audioFrameListener == null - ? Text('setAudioFrameListener') - : Text('removeAudioFrameListener'), - ) - ], - ), - ]), - ), + ], + ); + }, ); } -} + +} \ No newline at end of file diff --git a/TRTC-Simple-Demo/lib/ui/test/test_web.dart b/TRTC-Simple-Demo/lib/ui/test/test_web.dart deleted file mode 100644 index 65191f8..0000000 --- a/TRTC-Simple-Demo/lib/ui/test/test_web.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud.dart'; -import 'package:tencent_trtc_cloud/tx_beauty_manager.dart'; -import 'package:tencent_trtc_cloud/tx_device_manager.dart'; -import 'package:tencent_trtc_cloud/tx_audio_effect_manager.dart'; -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:trtc_demo/utils/tool.dart'; - -class TestWebPage extends StatefulWidget { - @override - State createState() { - return TestWebPageState(); - } -} - -class TestWebPageState extends State { - late TRTCCloud trtcCloud; - late TXDeviceManager txDeviceManager; - late TXBeautyManager txBeautyManager; - late TXAudioEffectManager txAudioManager; - - @override - initState() { - super.initState(); - initTrtc(); - } - - initTrtc() async { - trtcCloud = (await TRTCCloud.sharedInstance())!; - } - - @override - Widget build(BuildContext context) { - return DefaultTabController( - length: 4, - child: Scaffold( - resizeToAvoidBottomInset: false, - appBar: AppBar( - title: const Text('Test API'), - centerTitle: true, - elevation: 0, - bottom: TabBar(tabs: [ - Tab(text: 'Main interface'), - Tab(text: 'Music interface'), - Tab(text: 'Video interface'), - Tab(text: 'Beauty & equipment') - ]), - ), - body: TabBarView(children: [ - ListView( - children: [ - TextButton( - onPressed: () async { - String? version = await trtcCloud.getSDKVersion(); - MeetingTool.toast(version, context); - }, - child: Text('getSDKVersion'), - ), - TextButton( - onPressed: () async { - trtcCloud.switchRole(TRTCCloudDef.TRTCRoleAudience); - }, - child: Text('switchRole-audience'), - ), - TextButton( - onPressed: () async { - trtcCloud.switchRole(TRTCCloudDef.TRTCRoleAnchor); - }, - child: Text('switchRole-anchor'), - ), - ], - ), - ListView( - children: [], - ), - ListView(children: []), - ListView( - children: [], - ), - ]), - ), - ); - } -} diff --git a/TRTC-Simple-Demo/lib/ui/window_dialog.dart b/TRTC-Simple-Demo/lib/ui/window_dialog.dart deleted file mode 100644 index 6299806..0000000 --- a/TRTC-Simple-Demo/lib/ui/window_dialog.dart +++ /dev/null @@ -1,58 +0,0 @@ - -import 'package:tencent_trtc_cloud/trtc_cloud_def.dart'; -import 'package:flutter/material.dart'; - -import 'package:trtc_demo/ui/bgra_image.dart'; - -class WindowSelectorDialog extends StatelessWidget { - final TRTCScreenCaptureSourceList windows; - - WindowSelectorDialog({required this.windows}); - - @override - Widget build(BuildContext context) { - return AlertDialog( - title: Text('Select a window to share'), - content: Container( - width: double.maxFinite, - child: GridView.builder( - itemCount: windows.count, - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 5, - crossAxisSpacing: 8, - mainAxisSpacing: 8, - childAspectRatio: 1, - ), - itemBuilder: (context, index) { - final window = windows.sourceInfo[index]; - final imageBuffer = (window.type == TRTCScreenCaptureSourceType.window) - ? window.iconBGRA - : window.thumbBGRA; - return InkWell( - onTap: () { - Navigator.of(context).pop(index); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - window.sourceName!, - style: TextStyle(fontSize: 12), - ), - SizedBox(height: 8), - imageBuffer != null - ? BgraImage( - bgraData: imageBuffer.buffer!, - width: imageBuffer.width!, - height: imageBuffer.height!, - ) - : Placeholder(fallbackWidth: 50, fallbackHeight: 50), - ], - ), - ); - }, - ), - ), - ); - } -} \ No newline at end of file diff --git a/TRTC-Simple-Demo/lib/utils/tool.dart b/TRTC-Simple-Demo/lib/utils/tool.dart index 0664c55..b3b0ccf 100644 --- a/TRTC-Simple-Demo/lib/utils/tool.dart +++ b/TRTC-Simple-Demo/lib/utils/tool.dart @@ -1,4 +1,7 @@ import 'dart:io'; +import 'dart:ui'; + +import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_styled_toast/flutter_styled_toast.dart'; import 'package:path_provider/path_provider.dart'; @@ -36,7 +39,7 @@ class MeetingTool { } static Future copyAssetToLocal(String asset, - {bool rewrite = false}) async { + {bool rewrite: false}) async { int lastIndex = asset.lastIndexOf("/"); final dir = await getApplicationDocumentsDirectory(); diff --git a/TRTC-Simple-Demo/macos/.gitignore b/TRTC-Simple-Demo/macos/.gitignore deleted file mode 100644 index d2fd377..0000000 --- a/TRTC-Simple-Demo/macos/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# Flutter-related -**/Flutter/ephemeral/ -**/Pods/ - -# Xcode-related -**/xcuserdata/ diff --git a/TRTC-Simple-Demo/macos/Flutter/GeneratedPluginRegistrant.swift b/TRTC-Simple-Demo/macos/Flutter/GeneratedPluginRegistrant.swift index 1fb21f9..4856f17 100644 --- a/TRTC-Simple-Demo/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/TRTC-Simple-Demo/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,10 +5,12 @@ import FlutterMacOS import Foundation +import audioplayers_darwin import path_provider_foundation -import tencent_trtc_cloud +import tencent_rtc_sdk func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) - TencentTRTCCloud.register(with: registry.registrar(forPlugin: "TencentTRTCCloud")) + TencentRTCCloud.register(with: registry.registrar(forPlugin: "TencentRTCCloud")) } diff --git a/TRTC-Simple-Demo/macos/Flutter/ephemeral/Flutter-Generated.xcconfig b/TRTC-Simple-Demo/macos/Flutter/ephemeral/Flutter-Generated.xcconfig new file mode 100644 index 0000000..cbd5023 --- /dev/null +++ b/TRTC-Simple-Demo/macos/Flutter/ephemeral/Flutter-Generated.xcconfig @@ -0,0 +1,11 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/iveshe/flutterSDK/flutter +FLUTTER_APPLICATION_PATH=/Users/iveshe/FlutterProject/flutter_github/TRTC_Flutter/TRTC-Simple-Demo +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=2.0.0 +FLUTTER_BUILD_NUMBER=2.0.0 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.dart_tool/package_config.json diff --git a/TRTC-Simple-Demo/macos/Flutter/ephemeral/flutter_export_environment.sh b/TRTC-Simple-Demo/macos/Flutter/ephemeral/flutter_export_environment.sh new file mode 100755 index 0000000..3bd02ad --- /dev/null +++ b/TRTC-Simple-Demo/macos/Flutter/ephemeral/flutter_export_environment.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/iveshe/flutterSDK/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/iveshe/FlutterProject/flutter_github/TRTC_Flutter/TRTC-Simple-Demo" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=2.0.0" +export "FLUTTER_BUILD_NUMBER=2.0.0" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/TRTC-Simple-Demo/macos/Runner.xcodeproj/project.pbxproj b/TRTC-Simple-Demo/macos/Runner.xcodeproj/project.pbxproj index 24ed9f8..99cf148 100644 --- a/TRTC-Simple-Demo/macos/Runner.xcodeproj/project.pbxproj +++ b/TRTC-Simple-Demo/macos/Runner.xcodeproj/project.pbxproj @@ -194,6 +194,7 @@ 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, 44B86C7454E7A9FB9AA68650 /* [CP] Embed Pods Frameworks */, + A37D89922C6BD503DCFDBB72 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -318,6 +319,23 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + A37D89922C6BD503DCFDBB72 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; BA07133C5EE218CBACB93F7C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/TRTC-Simple-Demo/macos/Runner/AppDelegate.swift b/TRTC-Simple-Demo/macos/Runner/AppDelegate.swift index d53ef64..8e02df2 100644 --- a/TRTC-Simple-Demo/macos/Runner/AppDelegate.swift +++ b/TRTC-Simple-Demo/macos/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ import Cocoa import FlutterMacOS -@NSApplicationMain +@main class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true diff --git a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 3c4935a..5083444 100644 Binary files a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index ed4cc16..f212081 100644 Binary files a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 483be61..38892bb 100644 Binary files a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index bcbf36d..1452fb4 100644 Binary files a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index 9c0a652..70cbd7b 100644 Binary files a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index e71a726..eeea61a 100644 Binary files a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 8a31fe2..e5939f6 100644 Binary files a/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and b/TRTC-Simple-Demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/TRTC-Simple-Demo/macos/Runner/Info.plist b/TRTC-Simple-Demo/macos/Runner/Info.plist index c281b2e..4b1bcfd 100644 --- a/TRTC-Simple-Demo/macos/Runner/Info.plist +++ b/TRTC-Simple-Demo/macos/Runner/Info.plist @@ -2,6 +2,11 @@ + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable diff --git a/TRTC-Simple-Demo/macos/TRTCPrivilegedTask/libPrivilegedTask.a b/TRTC-Simple-Demo/macos/TRTCPrivilegedTask/libPrivilegedTask.a index fdae536..7921e54 100644 Binary files a/TRTC-Simple-Demo/macos/TRTCPrivilegedTask/libPrivilegedTask.a and b/TRTC-Simple-Demo/macos/TRTCPrivilegedTask/libPrivilegedTask.a differ diff --git a/TRTC-Simple-Demo/pubspec.yaml b/TRTC-Simple-Demo/pubspec.yaml index a100484..50bcb29 100644 --- a/TRTC-Simple-Demo/pubspec.yaml +++ b/TRTC-Simple-Demo/pubspec.yaml @@ -6,15 +6,16 @@ environment: sdk: '>=2.12.0 <3.0.0' dependencies: - tencent_trtc_cloud: ^2.8.2 + # tencent_trtc_cloud: ^1.0.8 + audioplayers: any cupertino_icons: ^1.0.5 provider: ^5.0.0 crypto: ^3.0.1 flutter_styled_toast: ^2.1.3 dio: ^4.0.6 path_provider: ^2.0.15 - permission_handler: ^6.1.3 - replay_kit_launcher: ^0.3.0 + permission_handler: ^11.3.1 +# replay_kit_launcher: ^0.3.0 flutter: sdk: flutter @@ -23,7 +24,7 @@ dev_dependencies: sdk: flutter build_runner: '>=1.6.2 <3.0.0' build_web_compilers: '>=2.12.0 <4.0.0' - + tencent_rtc_sdk: ^12.2.1 flutter: # The following line ensures that the Material Icons font is @@ -34,8 +35,8 @@ flutter: # To add assets to your application, add an assets section, like this: # MP3 can choose not to pack, but web must be mp3 file assets: - - images/watermark_img.png - - images/bg_main_title.png - - images/magic-line.png - - media/daoxiang.mp3 - - images/avatar3_100.20191230.png + - images/watermark_img.png + - images/bg_main_title.png + - images/magic-line.png + - media/daoxiang.mp3 + - images/avatar3_100.20191230.png diff --git a/TRTC-Simple-Demo/web/assets/AssetManifest.json b/TRTC-Simple-Demo/web/assets/AssetManifest.json deleted file mode 100644 index 898f687..0000000 --- a/TRTC-Simple-Demo/web/assets/AssetManifest.json +++ /dev/null @@ -1 +0,0 @@ -{"images/bg_main_title.png":["images/bg_main_title.png"],"images/magic-line.png":["images/magic-line.png"],"images/watermark_img.png":["images/watermark_img.png"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]} \ No newline at end of file diff --git a/TRTC-Simple-Demo/web/assets/FontManifest.json b/TRTC-Simple-Demo/web/assets/FontManifest.json deleted file mode 100644 index 464ab58..0000000 --- a/TRTC-Simple-Demo/web/assets/FontManifest.json +++ /dev/null @@ -1 +0,0 @@ -[{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]}] \ No newline at end of file diff --git a/TRTC-Simple-Demo/web/assets/NOTICES b/TRTC-Simple-Demo/web/assets/NOTICES deleted file mode 100644 index d666e48..0000000 --- a/TRTC-Simple-Demo/web/assets/NOTICES +++ /dev/null @@ -1,15934 +0,0 @@ -StackWalker - -Copyright (c) 2005-2009, Jochen Kalmbach -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 Jochen Kalmbach 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 OWNER 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. --------------------------------------------------------------------------------- -StackWalker - -Copyright (c) 2005-2013, Jochen Kalmbach -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 Jochen Kalmbach 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 OWNER 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. --------------------------------------------------------------------------------- -abseil-cpp - -Apache License -Version 2.0, January 2004 -https://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 - - https://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. --------------------------------------------------------------------------------- -abseil-cpp -accessibility -skia - -Copyright 2020 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -abseil-cpp -angle -boringssl -etc1 -khronos -txt -vulkan -vulkan-deps -wuffs - -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. --------------------------------------------------------------------------------- -accessibility - -Copyright (c) 2009 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility - -Copyright (c) 2010 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility - -Copyright (c) 2014 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility -angle - -Copyright (c) 2013 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility -base - -Copyright 2013 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility -base -fuchsia_sdk -skia -zlib - -Copyright 2018 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility -base -icu -zlib - -Copyright 2014 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility -base -zlib - -Copyright (c) 2011 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility -engine -gpu -tonic -txt - -Copyright 2013 The Flutter Authors. 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 Inc. 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 OWNER 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. --------------------------------------------------------------------------------- -accessibility -fuchsia_sdk -skia -zlib - -Copyright 2019 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility -icu -skia - -Copyright 2015 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility -icu -skia - -Copyright 2016 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility -zlib - -Copyright (c) 2012 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -accessibility -zlib - -Copyright 2017 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright (C) 2009 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. --------------------------------------------------------------------------------- -angle - -Copyright (C) 2012 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. --------------------------------------------------------------------------------- -angle - -Copyright (c) 2008 NVIDIA, Corporation - -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 (including the next -paragraph) 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. --------------------------------------------------------------------------------- -angle - -Copyright (c) 2008-2018 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -angle - -Copyright (c) 2010 NVIDIA, Corporation - -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 (including the next -paragraph) 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. --------------------------------------------------------------------------------- -angle - -Copyright 2002 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2010 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2011 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2012 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2013 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2014 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2015 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2018 The ANGLE Project Authors. -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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2018 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2019 The ANGLE Project. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2020 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2020 The ANGLE Project. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright 2021 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle - -Copyright The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle -base - -Copyright 2016 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle -base - -Copyright 2017 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -angle -fuchsia_sdk - -Copyright 2019 The Fuchsia Authors. 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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -angle -fuchsia_sdk -rapidjson - -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. --------------------------------------------------------------------------------- -angle -fuchsia_sdk -skia - -Copyright 2021 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -angle -khronos - -Copyright (c) 2013-2014 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -angle -khronos - -Copyright (c) 2013-2017 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -angle -khronos - -Copyright (c) 2013-2018 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -angle -xxhash - -Copyright 2019 The ANGLE Project Authors. 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 TransGaming Inc., Google Inc., 3DLabs Inc. - Ltd., nor the names of their 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 OWNER 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. --------------------------------------------------------------------------------- -async - -Copyright 2015, the Dart project authors. - -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 LLC 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 -OWNER 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. - --------------------------------------------------------------------------------- -boolean_selector - -Copyright 2016, the Dart project authors. 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 Inc. 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 -OWNER 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. - --------------------------------------------------------------------------------- -boringssl - -Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) -All rights reserved. - -This package is an SSL implementation written -by Eric Young (eay@cryptsoft.com). -The implementation was written so as to conform with Netscapes SSL. - -This library is free for commercial and non-commercial use as long as -the following conditions are aheared to. The following conditions -apply to all code found in this distribution, be it the RC4, RSA, -lhash, DES, etc., code; not just the SSL code. The SSL documentation -included with this distribution is covered by the same copyright terms -except that the holder is Tim Hudson (tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in -the code are not to be removed. -If this package is used in a product, Eric Young should be given attribution -as the author of the parts of the library used. -This can be in the form of a textual message at program startup or -in documentation (online or textual) provided with the package. - -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 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. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -All rights reserved. - -This package is an SSL implementation written -by Eric Young (eay@cryptsoft.com). -The implementation was written so as to conform with Netscapes SSL. - -This library is free for commercial and non-commercial use as long as -the following conditions are aheared to. The following conditions -apply to all code found in this distribution, be it the RC4, RSA, -lhash, DES, etc., code; not just the SSL code. The SSL documentation -included with this distribution is covered by the same copyright terms -except that the holder is Tim Hudson (tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in -the code are not to be removed. -If this package is used in a product, Eric Young should be given attribution -as the author of the parts of the library used. -This can be in the form of a textual message at program startup or -in documentation (online or textual) provided with the package. - -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 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. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2000 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2001 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2002 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2003 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2004 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2005 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2005 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2006 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2007 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2011 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2002 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2003 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2004 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2005 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2007 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2008 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2002 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2003 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2005 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2001 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2001-2011 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2002-2006 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2003 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2004 Kungliga Tekniska Högskolan -(Royal Institute of Technology, Stockholm, Sweden). -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. - -3. Neither the name of the Institute 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 INSTITUTE 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 INSTITUTE 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2004 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2005 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2006 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2006,2007 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2008 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2010 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2011 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2011 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2012 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2013 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2014 The OpenSSL Project. 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 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. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2014, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015 The OpenSSL Project. 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2016, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2017, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2017, the HRSS authors. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2018, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2019, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2020 Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, 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. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2020, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2002 Sun Microsystems, 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 2002 Sun Microsystems, 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. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED 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 OpenSSL PROJECT OR -ITS 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 2005 Nokia. All rights reserved. - -The portions of the attached software ("Contribution") is developed by -Nokia Corporation and is licensed pursuant to the OpenSSL open source -license. - -The Contribution, originally written by Mika Kousa and Pasi Eronen of -Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites -support (see RFC 4279) to OpenSSL. - -No patent licenses or other rights except those expressly stated in -the OpenSSL open source license shall be deemed granted or received -expressly, by implication, estoppel, or otherwise. - -No assurances are provided by Nokia that the Contribution does not -infringe the patent or other intellectual property rights of any third -party or that the license provides you with all the necessary rights -to make use of the Contribution. - -THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN -ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA -SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY -OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR -OTHERWISE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2005, 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 2006, 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2007, 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2008 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 2008, 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 2009 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 2009, 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. -Copyright (c) 2012, Intel Corporation. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. -Copyright (c) 2014, Intel Corporation. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. -Copyright (c) 2015, Intel Inc. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2015, 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2016 Brian Smith. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, 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. --------------------------------------------------------------------------------- -boringssl - -Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -The MIT License (MIT) - -Copyright (c) 2015-2016 the fiat-crypto authors (see -https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). - -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. --------------------------------------------------------------------------------- -boringssl -dart - -OpenSSL License - - ==================================================================== - Copyright (c) 1998-2011 The OpenSSL Project. 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. - - 3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - - 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - - 5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - - 6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - - THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - EXPRESSED 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 OpenSSL PROJECT OR - ITS 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. - ==================================================================== - - This product includes cryptographic software written by Eric Young - (eay@cryptsoft.com). This product includes software written by Tim - Hudson (tjh@cryptsoft.com). - -Original SSLeay License - -* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -* All rights reserved. - -* This package is an SSL implementation written -* by Eric Young (eay@cryptsoft.com). -* The implementation was written so as to conform with Netscapes SSL. - -* This library is free for commercial and non-commercial use as long as -* the following conditions are aheared to. The following conditions -* apply to all code found in this distribution, be it the RC4, RSA, -* lhash, DES, etc., code; not just the SSL code. The SSL documentation -* included with this distribution is covered by the same copyright terms -* except that the holder is Tim Hudson (tjh@cryptsoft.com). - -* Copyright remains Eric Young's, and as such any Copyright notices in -* the code are not to be removed. -* If this package is used in a product, Eric Young should be given attribution -* as the author of the parts of the library used. -* This can be in the form of a textual message at program startup or -* in documentation (online or textual) provided with the package. - -* 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 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. -* 3. All advertising materials mentioning features or use of this software -* must display the following acknowledgement: -* "This product includes cryptographic software written by -* Eric Young (eay@cryptsoft.com)" -* The word 'cryptographic' can be left out if the rouines from the library -* being used are not cryptographic related :-). -* 4. If you include any Windows specific code (or a derivative thereof) from -* the apps directory (application code) you must include an acknowledgement: -* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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. - -* The licence and distribution terms for any publically available version or -* derivative of this code cannot be changed. i.e. this code cannot simply be -* copied and put under another distribution licence -* [including the GNU Public Licence.] - -ISC license used for completely new code in BoringSSL: - -/* Copyright (c) 2015, Google Inc. - - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, 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. - -The code in third_party/fiat carries the MIT license: - -Copyright (c) 2015-2016 the fiat-crypto authors (see -https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). - -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. - -Licenses for support code - -Parts of the TLS test suite are under the Go license. This code is not included -in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so -distributing code linked against BoringSSL does not trigger this license: - -Copyright (c) 2009 The Go Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -characters - -Copyright 2019, the Dart project authors. 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 Inc. 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 -OWNER 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. - --------------------------------------------------------------------------------- -charcode -http_parser -matcher -path -source_span -stack_trace -string_scanner - -Copyright 2014, the Dart project authors. 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 Inc. 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 -OWNER 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. - --------------------------------------------------------------------------------- -clock -fake_async - - - 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. --------------------------------------------------------------------------------- -collection -stream_channel -typed_data - -Copyright 2015, the Dart project authors. 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 Inc. 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 -OWNER 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. - --------------------------------------------------------------------------------- -colorama - -Copyright (c) 2010 Jonathan Hartley -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 the copyright holders, nor those 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. --------------------------------------------------------------------------------- -crypto - -Copyright 2015, the Dart project authors. - -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 LLC 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 -OWNER 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. - --------------------------------------------------------------------------------- -cupertino_icons - -The MIT License (MIT) - -Copyright (c) 2016 Vladimir Kharlampidi - -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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2003-2005 Tom Wu -Copyright (c) 2012 Adam Singer (adam@solvr.io) -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, 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" AND WITHOUT WARRANTY OF ANY KIND, -EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY -WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, -INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF -THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -In addition, the following condition applies: - -All redistributions must retain an intact copy of this copyright notice -and disclaimer. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2010, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2014 The Polymer Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file -for details. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart - -Copyright 2009 The Go Authors. All rights reserved. -Use of this source code is governed by a BSD-style -license that can be found in the LICENSE file --------------------------------------------------------------------------------- -dart - -Copyright 2012, the Dart project authors. - -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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -dart -double-conversion -icu - -Copyright 2006-2008 the V8 project authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -dio - -MIT License - -Copyright (c) 2018 wendux - -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. --------------------------------------------------------------------------------- -double-conversion -icu - -Copyright 2010 the V8 project authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -double-conversion -icu - -Copyright 2012 the V8 project authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -expat - -Copyright 2021 Google Inc. - -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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -ffi - -Copyright 2019, the Dart project authors. - -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 LLC 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 -OWNER 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. - --------------------------------------------------------------------------------- -ffx_spd - -Copyright (c) 2017-2019 Advanced Micro Devices, Inc. All rights reserved. -Copyright (c) <2014> - -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. --------------------------------------------------------------------------------- -ffx_spd - -Copyright (c) 2017-2020 Advanced Micro Devices, Inc. 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, 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. --------------------------------------------------------------------------------- -file - -Copyright 2017, the Dart project authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd - -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. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - -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. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - and Clark Cooper -Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. - -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. --------------------------------------------------------------------------------- -files - -Copyright 2000, Clark Cooper -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, 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. --------------------------------------------------------------------------------- -flutter - -Copyright 2014 The Flutter Authors. 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 Inc. 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 OWNER 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. - --------------------------------------------------------------------------------- -flutter_styled_toast - - 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. - --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2000, 2001, 2002, 2003, 2006, 2010 by -Francesco Zappa Nardelli - -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. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2000-2004, 2006-2011, 2013, 2014 by -Francesco Zappa Nardelli - -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. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001, 2002 by -Francesco Zappa Nardelli - -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. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001, 2002, 2003, 2004 by -Francesco Zappa Nardelli - -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. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001-2008, 2011, 2013, 2014 by -Francesco Zappa Nardelli - -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. --------------------------------------------------------------------------------- -freetype2 - -Copyright 1990, 1994, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2004, 2011 Francesco Zappa Nardelli - -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 COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY 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. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2014 - Francesco Zappa Nardelli - -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 COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY 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. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2015 - Francesco Zappa Nardelli - -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 COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY 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. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000, 2001, 2004 by -Francesco Zappa Nardelli - -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. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2001, 2002 by -Francesco Zappa Nardelli - -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. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2001, 2003 by -Francesco Zappa Nardelli - -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. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2010, 2012-2014 by -Francesco Zappa Nardelli - -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. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2001, 2002, 2012 Francesco Zappa Nardelli - -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 COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY 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. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2003 by -Francesco Zappa Nardelli - -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. --------------------------------------------------------------------------------- -freetype2 - -The FreeType Project LICENSE - - 2006-Jan-27 - -Copyright 1996-2002, 2006 by -David Turner, Robert Wilhelm, and Werner Lemberg - -Introduction -============ - - The FreeType Project is distributed in several archive packages; - some of them may contain, in addition to the FreeType font engine, - various tools and contributions which rely on, or relate to, the - FreeType Project. - - This license applies to all files found in such packages, and - which do not fall under their own explicit license. The license - affects thus the FreeType font engine, the test programs, - documentation and makefiles, at the very least. - - This license was inspired by the BSD, Artistic, and IJG - (Independent JPEG Group) licenses, which all encourage inclusion - and use of free software in commercial and freeware products - alike. As a consequence, its main points are that: - - o We don't promise that this software works. However, we will be - interested in any kind of bug reports. (`as is' distribution) - - o You can use this software for whatever you want, in parts or - full form, without having to pay us. (`royalty-free' usage) - - o You may not pretend that you wrote this software. If you use - it, or only parts of it, in a program, you must acknowledge - somewhere in your documentation that you have used the - FreeType code. (`credits') - - We specifically permit and encourage the inclusion of this - software, with or without modifications, in commercial products. - We disclaim all warranties covering The FreeType Project and - assume no liability related to The FreeType Project. - - Finally, many people asked us for a preferred form for a - credit/disclaimer to use in compliance with this license. We thus - encourage you to use the following text: - - Portions of this software are copyright © The FreeType - Project (www.freetype.org). All rights reserved. - - Please replace with the value from the FreeType version you - actually use. - -Legal Terms -=========== - -0. Definitions - - Throughout this license, the terms `package', `FreeType Project', - and `FreeType archive' refer to the set of files originally - distributed by the authors (David Turner, Robert Wilhelm, and - Werner Lemberg) as the `FreeType Project', be they named as alpha, - beta or final release. - - `You' refers to the licensee, or person using the project, where - `using' is a generic term including compiling the project's source - code as well as linking it to form a `program' or `executable'. - This program is referred to as `a program using the FreeType - engine'. - - This license applies to all files distributed in the original - FreeType Project, including all source code, binaries and - documentation, unless otherwise stated in the file in its - original, unmodified form as distributed in the original archive. - If you are unsure whether or not a particular file is covered by - this license, you must contact us to verify this. - - The FreeType Project is copyright (C) 1996-2000 by David Turner, - Robert Wilhelm, and Werner Lemberg. All rights reserved except as - specified below. - -1. No Warranty - - THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO - USE, OF THE FREETYPE PROJECT. - -2. Redistribution - - This license grants a worldwide, royalty-free, perpetual and - irrevocable right and license to use, execute, perform, compile, - display, copy, create derivative works of, distribute and - sublicense the FreeType Project (in both source and object code - forms) and derivative works thereof for any purpose; and to - authorize others to exercise some or all of the rights granted - herein, subject to the following conditions: - - o Redistribution of source code must retain this license file - (`FTL.TXT') unaltered; any additions, deletions or changes to - the original files must be clearly indicated in accompanying - documentation. The copyright notices of the unaltered, - original files must be preserved in all copies of source - files. - - o Redistribution in binary form must provide a disclaimer that - states that the software is based in part of the work of the - FreeType Team, in the distribution documentation. We also - encourage you to put an URL to the FreeType web page in your - documentation, though this isn't mandatory. - - These conditions apply to any software derived from or based on - the FreeType Project, not just the unmodified files. If you use - our work, you must acknowledge us. However, no fee need be paid - to us. - -3. Advertising - - Neither the FreeType authors and contributors nor you shall use - the name of the other for commercial, advertising, or promotional - purposes without specific prior written permission. - - We suggest, but do not require, that you use one or more of the - following phrases to refer to this software in your documentation - or advertising materials: `FreeType Project', `FreeType Engine', - `FreeType library', or `FreeType Distribution'. - - As you have not signed this license, you are not required to - accept it. However, as the FreeType Project is copyrighted - material, only this license, or another one contracted with the - authors, grants you the right to use, distribute, and modify it. - Therefore, by using, distributing, or modifying the FreeType - Project, you indicate that you understand and accept all the terms - of this license. - -4. Contacts - - There are two mailing lists related to FreeType: - - o freetype@nongnu.org - - Discusses general use and applications of FreeType, as well as - future and wanted additions to the library and distribution. - If you are looking for support, start in this list if you - haven't found anything to help you in the documentation. - - o freetype-devel@nongnu.org - - Discusses bugs, as well as engine internals, design issues, - specific licenses, porting, etc. - - Our home page can be found at - - https://www.freetype.org - ---- end of FTL.TXT --- --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2014 The Fuchsia Authors. 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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2015 The Fuchsia Authors. 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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2016 The Fuchsia Authors. 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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2016 The Fuchsia Authors. All rights reserved. -Copyright (c) 2009 Corey Tabaka - -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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2017 The Fuchsia Authors. 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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2018 The Fuchsia Authors. 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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2019 The Fuchsia Authors. - -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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2020 The Fuchsia Authors. 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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2021 The Flutter Authors. 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 Inc. 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 OWNER 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. --------------------------------------------------------------------------------- -fuchsia_sdk - -Copyright 2021 The Fuchsia Authors. 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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -fuchsia_sdk - -The majority of files in this project use the Apache 2.0 License. -There are a few exceptions and their license can be found in the source. -Any license deviations from Apache 2.0 are "more permissive" licenses. - -=========================================================================================== - - 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. --------------------------------------------------------------------------------- -fuchsia_sdk - -musl as a whole is licensed under the following standard MIT license: - -Copyright © 2005-2014 Rich Felker, et al. - -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. - -Authors/contributors include: - -Alex Dowad -Alexander Monakov -Anthony G. Basile -Arvid Picciani -Bobby Bingham -Boris Brezillon -Brent Cook -Chris Spiegel -Clément Vasseur -Daniel Micay -Denys Vlasenko -Emil Renner Berthing -Felix Fietkau -Felix Janda -Gianluca Anzolin -Hauke Mehrtens -Hiltjo Posthuma -Isaac Dunham -Jaydeep Patil -Jens Gustedt -Jeremy Huntwork -Jo-Philipp Wich -Joakim Sindholt -John Spencer -Josiah Worcester -Justin Cormack -Khem Raj -Kylie McClain -Luca Barbato -Luka Perkov -M Farkas-Dyck (Strake) -Mahesh Bodapati -Michael Forney -Natanael Copa -Nicholas J. Kain -orc -Pascal Cuoq -Petr Hosek -Pierre Carrier -Rich Felker -Richard Pennington -Shiz -sin -Solar Designer -Stefan Kristiansson -Szabolcs Nagy -Timo Teräs -Trutz Behn -Valentin Ochs -William Haddon - -Portions of this software are derived from third-party works licensed -under terms compatible with the above MIT license: - -Much of the math library code (third_party/math/* and -third_party/complex/*, and third_party/include/libm.h) is -Copyright © 1993,2004 Sun Microsystems or -Copyright © 2003-2011 David Schultz or -Copyright © 2003-2009 Steven G. Kargl or -Copyright © 2003-2009 Bruce D. Evans or -Copyright © 2008 Stephen L. Moshier -and labelled as such in comments in the individual source files. All -have been licensed under extremely permissive terms. - -The smoothsort implementation (third_party/smoothsort/qsort.c) is -Copyright © 2011 Valentin Ochs and is licensed under an MIT-style -license. - -The x86_64 files in third_party/arch were written by Nicholas J. Kain -and is licensed under the standard MIT terms. - -All other files which have no copyright comments are original works -produced specifically for use as part of this library, written either -by Rich Felker, the main author of the library, or by one or more -contibutors listed above. Details on authorship of individual files -can be found in the git version control history of the project. The -omission of copyright and license comments in each file is in the -interest of source tree size. - -In addition, permission is hereby granted for all public header files -(include/* and arch/*/bits/*) and crt files intended to be linked into -applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit -the copyright notice and permission notice otherwise required by the -license, and to use these files without any requirement of -attribution. These files include substantial contributions from: - -Bobby Bingham -John Spencer -Nicholas J. Kain -Rich Felker -Richard Pennington -Stefan Kristiansson -Szabolcs Nagy - -all of whom have explicitly granted such permission. - -This file previously contained text expressing a belief that most of -the files covered by the above exception were sufficiently trivial not -to be subject to copyright, resulting in confusion over whether it -negated the permissions granted in the license. In the spirit of -permissive licensing, and of not having licensing issues being an -obstacle to adoption, that text has been removed. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2002-2006 Marcus Geelnard -Copyright (c) 2006-2016 Camilla Berglund - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2002-2006 Marcus Geelnard -Copyright (c) 2006-2016 Camilla Berglund -Copyright (c) 2012 Torsten Walluhn - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2006-2016 Camilla Berglund - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2009-2016 Camilla Berglund - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2009-2016 Camilla Berglund -Copyright (c) 2012 Torsten Walluhn - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2010-2016 Camilla Berglund - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2014 Jonas Ådahl - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2014-2015 Brandon Schaefer - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -harfbuzz - -Copyright (C) 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright (C) 2012 Grigori Goronzy - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, 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. --------------------------------------------------------------------------------- -harfbuzz - -Copyright (C) 2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2004,2007,2009 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2004,2007,2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2006 Behdad Esfahbod -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007 Chris Wilson -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012,2013 Google, Inc. -Copyright © 2019, Facebook Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2018,2019,2020 Ebrahim Byagowi -Copyright © 2018 Khaled Hosny - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2010,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2012,2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2012,2018 Google, Inc. -Copyright © 2019 Facebook, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2009 Keith Stribley -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2009 Keith Stribley -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Codethink Limited -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Codethink Limited -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Martin Hosken -Copyright © 2011 SIL International - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Martin Hosken -Copyright © 2011 SIL International -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012 Google, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012,2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012 Mozilla Foundation. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2013 Mozilla Foundation. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2017 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2013 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015 Google, Inc. -Copyright © 2019 Adobe Inc. -Copyright © 2019 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015 Mozilla Foundation. -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015-2019 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Elie Roux -Copyright © 2018 Google, Inc. -Copyright © 2018-2019 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. -Copyright © 2018 Khaled Hosny -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Igalia S.L. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017 Google, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017 Google, Inc. -Copyright © 2019 Facebook, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017,2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi -Copyright © 2020 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Google, Inc. -Copyright © 2019 Facebook, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Adobe Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018-2019 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2019 Adobe Inc. -Copyright © 2019 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2019 Adobe, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2019 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2019 Facebook, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2019 Adobe Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2019-2020 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2020 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2020 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -HarfBuzz is licensed under the so-called "Old MIT" license. Details follow. -For parts of HarfBuzz that are licensed under different licenses see individual -files names COPYING in subdirectories where applicable. - -Copyright © 2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020 Google, Inc. -Copyright © 2018,2019,2020 Ebrahim Byagowi -Copyright © 2019,2020 Facebook, Inc. -Copyright © 2012 Mozilla Foundation -Copyright © 2011 Codethink Limited -Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies) -Copyright © 2009 Keith Stribley -Copyright © 2009 Martin Hosken and SIL International -Copyright © 2007 Chris Wilson -Copyright © 2006 Behdad Esfahbod -Copyright © 2005 David Turner -Copyright © 2004,2007,2008,2009,2010 Red Hat, Inc. -Copyright © 1998-2004 David Turner and Werner Lemberg - -For full copyright notices consult the individual files in the package. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1995-2016 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. - -All trademarks and registered trademarks mentioned herein are the -property of their respective owners. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 Computer Systems and Communication Lab, - Institute of Information Science, Academia - * Sinica. 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 the Computer Systems and Communication Lab - 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 -REGENTS 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. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 TaBE Project. -Copyright (c) 1999 Pai-Hsiang Hsiao. -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 the TaBE Project 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 -REGENTS 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. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2002 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2013 International Business Machines Corporation -and others. All Rights Reserved. - -Project: https://github.com/veer66/lao-dictionary -Dictionary: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary.txt -License: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary-LICENSE.txt - (copied below) - - This file is derived from the above dictionary, with slight - modifications. - - Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. - 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. - -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. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2014 International Business Machines Corporation -and others. All Rights Reserved. - -This list is part of a project hosted at: - github.com/kanyawtech/myanmar-karen-word-lists - -Copyright (c) 2013, LeRoy Benjamin Sharon -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 Myanmar Karen Word Lists, 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. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2010. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2011. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2012. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2014. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2016. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -icu - -Copyright 1996 Chih-Hao Tsai @ Beckman Institute, - University of Illinois -c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 --------------------------------------------------------------------------------- -icu - -Copyright 2000, 2001, 2002, 2003 Nara Institute of Science -and Technology. All Rights Reserved. - -Use, reproduction, and distribution of this software is permitted. -Any copy of this software, whether in its original form or modified, -must include both the above copyright notice and the following -paragraphs. - -Nara Institute of Science and Technology (NAIST), -the copyright holders, disclaims all warranties with regard to this -software, including all implied warranties of merchantability and -fitness, in no event shall NAIST be liable for -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 tortuous action, arising out -of or in connection with the use or performance of this software. - -A large portion of the dictionary entries -originate from ICOT Free Software. The following conditions for ICOT -Free Software applies to the current dictionary as well. - -Each User may also freely distribute the Program, whether in its -original form or modified, to any third party or parties, PROVIDED -that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear -on, or be attached to, the Program, which is distributed substantially -in the same form as set out herein and that such intended -distribution, if actually made, will neither violate or otherwise -contravene any of the laws and regulations of the countries having -jurisdiction over the User or the intended distribution itself. - -NO WARRANTY - -The program was produced on an experimental basis in the course of the -research and development conducted during the project and is provided -to users as so produced on an experimental basis. Accordingly, the -program is provided without any warranty whatsoever, whether express, -implied, statutory or otherwise. The term "warranty" used herein -includes, but is not limited to, any warranty of the quality, -performance, merchantability and fitness for a particular purpose of -the program and the nonexistence of any infringement or violation of -any right of any third party. - -Each user of the program will agree and understand, and be deemed to -have agreed and understood, that there is no warranty whatsoever for -the program and, accordingly, the entire risk arising from or -otherwise connected with the program is assumed by the user. - -Therefore, neither ICOT, the copyright holder, or any other -organization that participated in or was otherwise related to the -development of the program and their respective officials, directors, -officers and other employees shall be held liable for any and all -damages, including, without limitation, general, special, incidental -and consequential damages, arising out of or otherwise in connection -with the use or inability to use the program or any product, material -or result produced or otherwise obtained by using the program, -regardless of whether they have been advised of, or otherwise had -knowledge of, the possibility of such damages at any time during the -project or thereafter. Each user will be deemed to have agreed to the -foregoing by his or her commencement of use of the program. The term -"use" as used herein includes, but is not limited to, the use, -modification, copying and distribution of the program and the -production of secondary products from the program. - -In the case where the program, whether in its original form or -modified, was distributed or delivered to or received by a user from -any person, organization or entity other than ICOT, unless it makes or -grants independently of ICOT any specific warranty to the user in -writing, such person, organization or entity, will also be exempted -from and not be held liable to the user for any such damages as noted -above as far as the program is concerned. --------------------------------------------------------------------------------- -icu - -Copyright 2006-2011, the V8 project authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -icu - -Copyright 2019 the V8 project authors. 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 LLC 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 -OWNER 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. --------------------------------------------------------------------------------- -icu - -Copyright © 1991-2020 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in https://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE 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 THE DATA FILES OR 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 these Data Files or Software without prior -written authorization of the copyright holder. --------------------------------------------------------------------------------- -icu - -The BSD License -http://opensource.org/licenses/bsd-license.php -Copyright (C) 2006-2008, 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 Inc. 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 OWNER 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. --------------------------------------------------------------------------------- -icu - -Unicode® Terms of Use -For the general privacy policy governing access to this site, see the Unicode Privacy Policy. For trademark usage, see the Unicode® Consortium Name and Trademark Usage Policy. - -A. Unicode Copyright. -1. Copyright © 1991-2017 Unicode, Inc. All rights reserved. -2. Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. -3. Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files solely for informational purposes and in the creation of products supporting the Unicode Standard, subject to the Terms and Conditions herein. -4. Further specifications of rights and restrictions pertaining to the use of the particular set of data files known as the "Unicode Character Database" can be found in the License. -5. Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. The online code charts carry specific restrictions. All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. -6. No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. -7. Modification is not permitted with respect to this document. All copies of this document must be verbatim. -B. Restricted Rights Legend. Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. -C. Warranties and Disclaimers. -1. This publication and/or website may include technical or typographical errors or other inaccuracies . Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. -2. If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. -3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. -D. Waiver of Damages. In no event shall Unicode or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. -E. Trademarks & Logos. -1. The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. -2. The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. -3. All third party trademarks referenced herein are the property of their respective owners. -F. Miscellaneous. -1. Jurisdiction and Venue. This server is operated from a location in the State of California, United States of America. Unicode makes no representation that the materials are appropriate for use in other locations. If you access this server from other locations, you are responsible for compliance with local laws. This Agreement, all use of this site and any claims and damages resulting from use of this site are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this site shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. -2. Modification by Unicode Unicode shall have the right to modify this Agreement at any time by posting it to this site. The user may not assign any part of this Agreement without Unicode’s prior written consent. -3. Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. -4. Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. -5. Entire Agreement. This Agreement constitutes the entire agreement between the parties. - -EXHIBIT 1 -UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE - -Unicode Data Files include all data files under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -Unicode Data Files do not include PDF online code charts under the -directory http://www.unicode.org/Public/. - -Software includes any source code published in the Unicode Standard -or under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -NOTICE TO USER: Carefully read the following legal agreement. -BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S -DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), -YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. -IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE -THE DATA FILES OR SOFTWARE. - -COPYRIGHT AND PERMISSION NOTICE - -Copyright © 1991-2017 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE 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 THE DATA FILES OR 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 these Data Files or Software without prior -written authorization of the copyright holder. --------------------------------------------------------------------------------- -intl - -Copyright 2013, the Dart project authors. 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 Inc. 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 -OWNER 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. - --------------------------------------------------------------------------------- -js - -Copyright 2012, the Dart project authors. 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 Inc. 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 -OWNER 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. - --------------------------------------------------------------------------------- -json_annotation -platform -process -term_glyph - -Copyright 2017, the Dart project authors. 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 Inc. 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 -OWNER 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. - --------------------------------------------------------------------------------- -khronos - -Copyright (c) 2007-2010 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. - -SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) - -Copyright (C) 1992 Silicon Graphics, Inc. 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, 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 including the dates of first publication and either -this permission notice or a reference to http://oss.sgi.com/projects/FreeB -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 SILICON -GRAPHICS, INC. 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. - -Except as contained in this notice, the name of Silicon Graphics, Inc. shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from Silicon -Graphics, Inc. --------------------------------------------------------------------------------- -khronos - -Copyright (c) 2007-2012 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -khronos - -Copyright (c) 2007-2016 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -khronos - -Copyright (c) 2008-2009 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -khronos - -Copyright (c) 2013-2016 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. --------------------------------------------------------------------------------- -libcxx -libcxxabi - -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. - ---- LLVM Exceptions to the Apache 2.0 License ---- - -As an exception, if, as a result of your compiling your source code, portions -of this Software are embedded into an Object form of such source code, you -may redistribute such embedded portions in such Object form without complying -with the conditions of Sections 4(a), 4(b) and 4(d) of the License. - -In addition, if you combine or link compiled forms of this Software with -software that is licensed under the GPLv2 ("Combined Software") and if a -court of competent jurisdiction determines that the patent provision (Section -3), the indemnity provision (Section 9) or other Section of the License -conflicts with the conditions of the GPLv2, you may retroactively and -prospectively choose to deem waived or otherwise exclude such Section(s) of -the License, but only in their entirety and only with respect to the Combined -Software. --------------------------------------------------------------------------------- -libcxx -libcxxabi - -Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT - -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. --------------------------------------------------------------------------------- -libcxx -libcxxabi - -University of Illinois/NCSA -Open Source License - -Copyright (c) 2009-2019 by the contributors listed in CREDITS.TXT - -All rights reserved. - -Developed by: - - LLVM Team - - University of Illinois at Urbana-Champaign - - http://llvm.org - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal with -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: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimers. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimers in the - documentation and/or other materials provided with the distribution. - - * Neither the names of the LLVM Team, University of Illinois at - Urbana-Champaign, nor the names of its contributors may be used to - endorse or promote products derived from this Software without specific - prior written permission. - -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 -CONTRIBUTORS 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 WITH THE -SOFTWARE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, 2014-2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). -All Rights Reserved. -Author: Siarhei Siamashka -Copyright (C) 2013-2014, Linaro Limited. All Rights Reserved. -Author: Ragesh Radhakrishnan -Copyright (C) 2014-2016, D. R. Commander. All Rights Reserved. -Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. -Copyright (C) 2016, Siarhei Siamashka. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). -All Rights Reserved. -Author: Siarhei Siamashka -Copyright (C) 2014, Siarhei Siamashka. All Rights Reserved. -Copyright (C) 2014, Linaro Limited. All Rights Reserved. -Copyright (C) 2015, D. R. Commander. All Rights Reserved. -Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2011, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2013, MIPS Technologies, Inc., California. -All Rights Reserved. -Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) - Darko Laus (darko.laus@imgtec.com) -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -All Rights Reserved. -Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) - Darko Laus (darko.laus@imgtec.com) -Copyright (C) 2015, D. R. Commander. All Rights Reserved. -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. -Copyright (C) 2014, Jay Foad. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2015, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2014 D. R. Commander. 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 the libjpeg-turbo Project 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 HOLDERS 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. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2015 D. R. Commander. 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 the libjpeg-turbo Project 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 HOLDERS 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. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2016 D. R. Commander. 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 the libjpeg-turbo Project 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 HOLDERS 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. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011 D. R. Commander. 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 the libjpeg-turbo Project 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 HOLDERS 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. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011, 2015 D. R. Commander. 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 the libjpeg-turbo Project 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 HOLDERS 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. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011-2016 D. R. Commander. 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 the libjpeg-turbo Project 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 HOLDERS 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. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander. -Copyright (C) 2015-2016, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014, 2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014, D. R. Commander. -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014-2015, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2010, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library - version 1.02 - -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2011, 2014, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2011, 2014-2016, D. R. Commander. -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -Copyright (C) 2014, Linaro Limited. -Copyright (C) 2015-2016, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2011, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009, 2012 Pierre Ossman for Cendio AB -Copyright (C) 2009, 2012, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009, 2012 Pierre Ossman for Cendio AB -Copyright (C) 2012, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -libjpeg-turbo note: This file has been modified by The libjpeg-turbo Project -to include only information relevant to libjpeg-turbo, to wordsmith certain -sections, and to remove impolitic language that existed in the libjpeg v8 -README. It is included only for reference. Please see README.md for -information specific to libjpeg-turbo. - -The Independent JPEG Group's JPEG software -========================================== - -This distribution contains a release of the Independent JPEG Group's free JPEG -software. You are welcome to redistribute this software and to use it for any -purpose, subject to the conditions under LEGAL ISSUES, below. - -This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone, -Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson, -Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers, -and other members of the Independent JPEG Group. - -IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee -(also known as JPEG, together with ITU-T SG16). - -DOCUMENTATION ROADMAP -===================== - -This file contains the following sections: - -OVERVIEW General description of JPEG and the IJG software. -LEGAL ISSUES Copyright, lack of warranty, terms of distribution. -REFERENCES Where to learn more about JPEG. -ARCHIVE LOCATIONS Where to find newer versions of this software. -FILE FORMAT WARS Software *not* to get. -TO DO Plans for future IJG releases. - -Other documentation files in the distribution are: - -User documentation: - usage.txt Usage instructions for cjpeg, djpeg, jpegtran, - rdjpgcom, and wrjpgcom. - *.1 Unix-style man pages for programs (same info as usage.txt). - wizard.txt Advanced usage instructions for JPEG wizards only. - change.log Version-to-version change highlights. -Programmer and internal documentation: - libjpeg.txt How to use the JPEG library in your own programs. - example.c Sample code for calling the JPEG library. - structure.txt Overview of the JPEG library's internal structure. - coderules.txt Coding style rules --- please read if you contribute code. - -Please read at least usage.txt. Some information can also be found in the JPEG -FAQ (Frequently Asked Questions) article. See ARCHIVE LOCATIONS below to find -out where to obtain the FAQ article. - -If you want to understand how the JPEG code works, we suggest reading one or -more of the REFERENCES, then looking at the documentation files (in roughly -the order listed) before diving into the code. - -OVERVIEW -======== - -This package contains C software to implement JPEG image encoding, decoding, -and transcoding. JPEG (pronounced "jay-peg") is a standardized compression -method for full-color and grayscale images. JPEG's strong suit is compressing -photographic images or other types of images that have smooth color and -brightness transitions between neighboring pixels. Images with sharp lines or -other abrupt features may not compress well with JPEG, and a higher JPEG -quality may have to be used to avoid visible compression artifacts with such -images. - -JPEG is lossy, meaning that the output pixels are not necessarily identical to -the input pixels. However, on photographic content and other "smooth" images, -very good compression ratios can be obtained with no visible compression -artifacts, and extremely high compression ratios are possible if you are -willing to sacrifice image quality (by reducing the "quality" setting in the -compressor.) - -This software implements JPEG baseline, extended-sequential, and progressive -compression processes. Provision is made for supporting all variants of these -processes, although some uncommon parameter settings aren't implemented yet. -We have made no provision for supporting the hierarchical or lossless -processes defined in the standard. - -We provide a set of library routines for reading and writing JPEG image files, -plus two sample applications "cjpeg" and "djpeg", which use the library to -perform conversion between JPEG and some other popular image file formats. -The library is intended to be reused in other applications. - -In order to support file conversion and viewing software, we have included -considerable functionality beyond the bare JPEG coding/decoding capability; -for example, the color quantization modules are not strictly part of JPEG -decoding, but they are essential for output to colormapped file formats or -colormapped displays. These extra functions can be compiled out of the -library if not required for a particular application. - -We have also included "jpegtran", a utility for lossless transcoding between -different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple -applications for inserting and extracting textual comments in JFIF files. - -The emphasis in designing this software has been on achieving portability and -flexibility, while also making it fast enough to be useful. In particular, -the software is not intended to be read as a tutorial on JPEG. (See the -REFERENCES section for introductory material.) Rather, it is intended to -be reliable, portable, industrial-strength code. We do not claim to have -achieved that goal in every aspect of the software, but we strive for it. - -We welcome the use of this software as a component of commercial products. -No royalty is required, but we do ask for an acknowledgement in product -documentation, as described under LEGAL ISSUES. - -LEGAL ISSUES -============ - -In plain English: - -1. We don't promise that this software works. (But if you find any bugs, - please let us know!) -2. You can use this software for whatever you want. You don't have to pay us. -3. You may not pretend that you wrote this software. If you use it in a - program, you must acknowledge somewhere in your documentation that - you've used the IJG code. - -In legalese: - -The authors make NO WARRANTY or representation, either express or implied, -with respect to this software, its quality, accuracy, merchantability, or -fitness for a particular purpose. This software is provided "AS IS", and you, -its user, assume the entire risk as to its quality and accuracy. - -This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding. -All Rights Reserved except as specified below. - -Permission is hereby granted to use, copy, modify, and distribute this -software (or portions thereof) for any purpose, without fee, subject to these -conditions: -(1) If any part of the source code for this software is distributed, then this -README file must be included, with this copyright and no-warranty notice -unaltered; and any additions, deletions, or changes to the original files -must be clearly indicated in accompanying documentation. -(2) If only executable code is distributed, then the accompanying -documentation must state that "this software is based in part on the work of -the Independent JPEG Group". -(3) Permission for use of this software is granted only if the user accepts -full responsibility for any undesirable consequences; the authors accept -NO LIABILITY for damages of any kind. - -These conditions apply to any software derived from or based on the IJG code, -not just to the unmodified library. If you use our work, you ought to -acknowledge us. - -Permission is NOT granted for the use of any IJG author's name or company name -in advertising or publicity relating to this software or products derived from -it. This software may be referred to only as "the Independent JPEG Group's -software". - -We specifically permit and encourage the use of this software as the basis of -commercial products, provided that all warranty or liability claims are -assumed by the product vendor. - -The Unix configuration script "configure" was produced with GNU Autoconf. -It is copyright by the Free Software Foundation but is freely distributable. -The same holds for its supporting scripts (config.guess, config.sub, -ltmain.sh). Another support script, install-sh, is copyright by X Consortium -but is also freely distributable. - -The IJG distribution formerly included code to read and write GIF files. -To avoid entanglement with the Unisys LZW patent (now expired), GIF reading -support has been removed altogether, and the GIF writer has been simplified -to produce "uncompressed GIFs". This technique does not use the LZW -algorithm; the resulting GIF files are larger than usual, but are readable -by all standard GIF decoders. - -We are required to state that - "The Graphics Interchange Format(c) is the Copyright property of - CompuServe Incorporated. GIF(sm) is a Service Mark property of - CompuServe Incorporated." - -REFERENCES -========== - -We recommend reading one or more of these references before trying to -understand the innards of the JPEG software. - -The best short technical introduction to the JPEG compression algorithm is - Wallace, Gregory K. "The JPEG Still Picture Compression Standard", - Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. -(Adjacent articles in that issue discuss MPEG motion picture compression, -applications of JPEG, and related topics.) If you don't have the CACM issue -handy, a PDF file containing a revised version of Wallace's article is -available at http://www.ijg.org/files/Wallace.JPEG.pdf. The file (actually -a preprint for an article that appeared in IEEE Trans. Consumer Electronics) -omits the sample images that appeared in CACM, but it includes corrections -and some added material. Note: the Wallace article is copyright ACM and IEEE, -and it may not be used for commercial purposes. - -A somewhat less technical, more leisurely introduction to JPEG can be found in -"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by -M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides -good explanations and example C code for a multitude of compression methods -including JPEG. It is an excellent source if you are comfortable reading C -code but don't know much about data compression in general. The book's JPEG -sample code is far from industrial-strength, but when you are ready to look -at a full implementation, you've got one here... - -The best currently available description of JPEG is the textbook "JPEG Still -Image Data Compression Standard" by William B. Pennebaker and Joan L. -Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. -Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG -standards (DIS 10918-1 and draft DIS 10918-2). - -The original JPEG standard is divided into two parts, Part 1 being the actual -specification, while Part 2 covers compliance testing methods. Part 1 is -titled "Digital Compression and Coding of Continuous-tone Still Images, -Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS -10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of -Continuous-tone Still Images, Part 2: Compliance testing" and has document -numbers ISO/IEC IS 10918-2, ITU-T T.83. - -The JPEG standard does not specify all details of an interchangeable file -format. For the omitted details we follow the "JFIF" conventions, revision -1.02. JFIF 1.02 has been adopted as an Ecma International Technical Report -and thus received a formal publication status. It is available as a free -download in PDF format from -http://www.ecma-international.org/publications/techreports/E-TR-098.htm. -A PostScript version of the JFIF document is available at -http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at -http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures. - -The TIFF 6.0 file format specification can be obtained by FTP from -ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme -found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems. -IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6). -Instead, we recommend the JPEG design proposed by TIFF Technical Note #2 -(Compression tag 7). Copies of this Note can be obtained from -http://www.ijg.org/files/. It is expected that the next revision -of the TIFF spec will replace the 6.0 JPEG design with the Note's design. -Although IJG's own code does not support TIFF/JPEG, the free libtiff library -uses our library to implement TIFF/JPEG per the Note. - -ARCHIVE LOCATIONS -================= - -The "official" archive site for this software is www.ijg.org. -The most recent released version can always be found there in -directory "files". - -The JPEG FAQ (Frequently Asked Questions) article is a source of some -general information about JPEG. -It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq -and other news.answers archive sites, including the official news.answers -archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/. -If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu -with body - send usenet/news.answers/jpeg-faq/part1 - send usenet/news.answers/jpeg-faq/part2 - -FILE FORMAT WARS -================ - -The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together -with ITU-T SG16) currently promotes different formats containing the name -"JPEG" which are incompatible with original DCT-based JPEG. IJG therefore does -not support these formats (see REFERENCES). Indeed, one of the original -reasons for developing this free software was to help force convergence on -common, interoperable format standards for JPEG files. -Don't use an incompatible file format! -(In any case, our decoder will remain capable of reading existing JPEG -image files indefinitely.) - -TO DO -===== - -Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org. --------------------------------------------------------------------------------- -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. --------------------------------------------------------------------------------- -libwebp - -Copyright 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. --------------------------------------------------------------------------------- -libwebp - -Copyright 2011 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. --------------------------------------------------------------------------------- -libwebp - -Copyright 2012 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. --------------------------------------------------------------------------------- -libwebp - -Copyright 2013 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. --------------------------------------------------------------------------------- -libwebp - -Copyright 2014 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. --------------------------------------------------------------------------------- -libwebp - -Copyright 2015 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. --------------------------------------------------------------------------------- -libwebp - -Copyright 2016 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. --------------------------------------------------------------------------------- -libwebp - -Copyright 2017 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. --------------------------------------------------------------------------------- -meta - -Copyright 2016, the Dart project authors. - -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 LLC 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 -OWNER 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. - --------------------------------------------------------------------------------- -nested -provider - -MIT License - -Copyright (c) 2019 Remi Rousselet - -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. --------------------------------------------------------------------------------- -path_provider -path_provider_linux -path_provider_macos -path_provider_windows -plugin_platform_interface - -Copyright 2013 The Flutter Authors. 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 Inc. 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 OWNER 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. - --------------------------------------------------------------------------------- -path_provider_platform_interface - -Copyright 2020 The Chromium Authors. 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 Inc. 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 OWNER 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. - --------------------------------------------------------------------------------- -permission_handler -permission_handler_platform_interface - -MIT License - -Copyright (c) 2018 Baseflow - -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. - --------------------------------------------------------------------------------- -pkg - -Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file -for details. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -rapidjson - -Copyright (c) 2006-2013 Alexander Chemeris - -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. - - 3. Neither the name of the product 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 AUTHOR ``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 AUTHOR 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. --------------------------------------------------------------------------------- -rapidjson - -Tencent is pleased to support the open source community by making RapidJSON available. - -Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. - -If you have downloaded a copy of the RapidJSON binary from Tencent, please note that the RapidJSON binary is licensed under the MIT License. -If you have downloaded a copy of the RapidJSON source code from Tencent, please note that RapidJSON source code is licensed under the MIT License, except for the third-party components listed below which are subject to different license terms. Your integration of RapidJSON into your own projects may require compliance with the MIT License, as well as the other licenses applicable to the third-party components included within RapidJSON. - -A copy of the MIT License is included in this file. - -Other dependencies and licenses: - -Open Source Software Licensed Under the BSD License: - -The msinttypes r29 -Copyright (c) 2006-2013 Alexander Chemeris -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 copyright holder 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 REGENTS 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 REGENTS AND 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. - -Terms of the MIT License: - -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. --------------------------------------------------------------------------------- -rapidjson - -Tencent is pleased to support the open source community by making RapidJSON available. - -Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. - -If you have downloaded a copy of the RapidJSON binary from Tencent, please note that the RapidJSON binary is licensed under the MIT License. -If you have downloaded a copy of the RapidJSON source code from Tencent, please note that RapidJSON source code is licensed under the MIT License, except for the third-party components listed below which are subject to different license terms. Your integration of RapidJSON into your own projects may require compliance with the MIT License, as well as the other licenses applicable to the third-party components included within RapidJSON. To avoid the problematic JSON license in your own projects, it's sufficient to exclude the bin/jsonchecker/ directory, as it's the only code under the JSON license. -A copy of the MIT License is included in this file. - -Other dependencies and licenses: - -Open Source Software Licensed Under the BSD License: - -The msinttypes r29 -Copyright (c) 2006-2013 Alexander Chemeris -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 copyright holder 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 REGENTS 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 REGENTS AND 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. - -Open Source Software Licensed Under the JSON License: - -json.org -Copyright (c) 2002 JSON.org -All Rights Reserved. - -JSON_checker -Copyright (c) 2002 JSON.org -All Rights Reserved. - -Terms of the JSON License: - -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 shall be used for Good, not Evil. - -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. - -Terms of the MIT License: - -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. --------------------------------------------------------------------------------- -rapidjson - -The MIT License (MIT) - -Copyright (c) 2017 Bart Muzzin - -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. - -Derived from: - -The MIT License (MIT) - -Copyright (c) 2015 mojmir svoboda - -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. --------------------------------------------------------------------------------- -replay_kit_launcher - -MIT License - -Copyright (c) 2020 Patrick Fu - -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. - --------------------------------------------------------------------------------- -root_certificates - -Mozilla Public License -Version 2.0 - -1. Definitions - -1.1. “Contributor” - -means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. - -1.2. “Contributor Version” - -means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor’s Contribution. - -1.3. “Contribution” - -means Covered Software of a particular Contributor. - -1.4. “Covered Software” - -means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. - -1.5. “Incompatible With Secondary Licenses” - -means - - a. that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. - -1.6. “Executable Form” - -means any form of the work other than Source Code Form. - -1.7. “Larger Work” - -means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. - -1.8. “License” - -means this document. - -1.9. “Licensable” - -means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. - -1.10. “Modifications” - -means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - -1.11. “Patent Claims” of a Contributor - -means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. - -1.12. “Secondary License” - -means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. - -1.13. “Source Code Form” - -means the form of the work preferred for making modifications. - -1.14. “You” (or “Your”) - -means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. - -2. License Grants and Conditions - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its Contributions. - -This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. - -3. Responsibilities - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients’ rights in the Source Code Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients’ rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. - -6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the Covered Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Covered Software is with You. Should any Covered Software prove defective in any respect, You (not any Contributor) assume the cost of any necessary servicing, repair, or correction. This disclaimer of warranty constitutes an essential part of this License. No use of any Covered Software is authorized under this License except under this disclaimer. - -7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall any Contributor, or anyone who distributes Covered Software as permitted above, be liable to You for any direct, indirect, special, incidental, or consequential damages of any character including, without limitation, damages for lost profits, loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party’s negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. - -8. Litigation - -Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party’s ability to bring cross-claims or counter-claims. - -9. Miscellaneous - -This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. - -10. Versions of the License - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0. --------------------------------------------------------------------------------- -root_certificates - -Mozilla Public License Version 2.0 -================================== - -1. Definitions - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -* 6. Disclaimer of Warranty - -* Covered Software is provided under this License on an "as is" -* basis, without warranty of any kind, either expressed, implied, or -* statutory, including, without limitation, warranties that the -* Covered Software is free of defects, merchantable, fit for a -* particular purpose or non-infringing. The entire risk as to the -* quality and performance of the Covered Software is with You. -* Should any Covered Software prove defective in any respect, You -* (not any Contributor) assume the cost of any necessary servicing, -* repair, or correction. This disclaimer of warranty constitutes an -* essential part of this License. No use of any Covered Software is -* authorized under this License except under this disclaimer. - -* 7. Limitation of Liability - -* Under no circumstances and under no legal theory, whether tort -* (including negligence), contract, or otherwise, shall any -* Contributor, or anyone who distributes Covered Software as -* permitted above, be liable to You for any direct, indirect, -* special, incidental, or consequential damages of any character -* including, without limitation, damages for lost profits, loss of -* goodwill, work stoppage, computer failure or malfunction, or any -* and all other commercial damages or losses, even if such party -* shall have been informed of the possibility of such damages. This -* limitation of liability shall not apply to liability for death or -* personal injury resulting from such party's negligence to the -* extent applicable law prohibits such limitation. Some -* jurisdictions do not allow the exclusion or limitation of -* incidental or consequential damages, so this exclusion and -* limitation may not apply to You. - -8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. --------------------------------------------------------------------------------- -skcms - -Copyright (c) 2018 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -skcms -vulkanmemoryallocator - -Copyright 2018 Google Inc. - -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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright (C) 2014 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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2011 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2011 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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2014 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2014-2016 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and/or associated documentation files (the "Materials"), -to deal in the Materials without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Materials, and to permit persons to whom the -Materials are 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 Materials. --------------------------------------------------------------------------------- -skia - -Copyright 2005 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2006 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2006-2012 The Android Open Source Project -Copyright 2012 Mozilla Foundation - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2007 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2008 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2008 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2009 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2009-2015 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2010 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2010 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2011 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2011 Google Inc. -Copyright 2012 Mozilla Foundation - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2011 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2012 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2012 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2013 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2013 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2014 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2014 Google Inc. -Copyright 2017 ARM Ltd. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2014 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2015 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2015 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2016 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2016 Mozilla Foundation - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2016 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2017 ARM Ltd. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2017 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google LLC - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google LLC. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google, LLC - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2018 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google Inc. and Adobe Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google LLC - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google LLC. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google, LLC - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2019 The Android Open Source Project - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2020 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2020 Google LLC - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2020 Google LLC. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2020 Google, LLC - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2021 Google Inc. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2021 Google LLC - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2021 Google LLC. - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -skia - -Copyright 2021 Google, LLC - -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 the copyright holder 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 -OWNER 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. --------------------------------------------------------------------------------- -smhasher - -All MurmurHash source files are placed in the public domain. - -The license below applies to all other code in SMHasher: - -Copyright (c) 2011 Google, 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. --------------------------------------------------------------------------------- -tcmalloc - -Copyright (c) 2003, 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -tcmalloc - -Copyright (c) 2005, 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -tencent_trtc_cloud - - - Apache License - Version 2.0, January 2004 - https://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 - - Copyright 2013-2018 Docker, 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 - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - --------------------------------------------------------------------------------- -test_api - -Copyright 2018, the Dart project authors. - -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 LLC 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 -OWNER 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. - --------------------------------------------------------------------------------- -vector_math - -Copyright 2015, 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 Inc. 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 -OWNER 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. - -Copyright (C) 2013 Andrew Magill - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. - --------------------------------------------------------------------------------- -vulkanmemoryallocator - -Copyright (c) 2017-2020 Advanced Micro Devices, Inc. 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, 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. --------------------------------------------------------------------------------- -win32 - -Copyright 2019, the Dart project authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -wuffs - -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 --------------------------------------------------------------------------------- -xdg_directories - -Copyright 2020 The Flutter Authors. 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 Inc. 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 -OWNER 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. - --------------------------------------------------------------------------------- -xxhash - -Copyright (C) 2012-2016, Yann Collet - -BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - -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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -xxhash - -Copyright (C) 2012-2016, Yann Collet. - -BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - -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. - -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 -OWNER 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. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2003, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2003, 2010 Mark Adler -Copyright (C) 2017 ARM, Inc. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2005, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2011, 2016 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2016 Jean-loup Gailly - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2016 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2017 Jean-loup Gailly - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2017 Jean-loup Gailly -detect_data_type() function provided freely by Cosmin Truta, 2006 - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2017 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - -Modifications for Zip64 support -Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - -For more info read MiniZip_info.txt - -Condition of use and distribution are the same than zlib : - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - -Modifications of Unzip for Zip64 -Copyright (C) 2007-2008 Even Rouault - -Modifications for Zip64 support on both zip and unzip -Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - -For more info read MiniZip_info.txt - -Condition of use and distribution are the same than zlib : - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2004, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2004-2017 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation -Authors: - Arjan van de Ven - Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation. All rights reserved. -Authors: - Wajdi Feghali - Jim Guilford - Vinodh Gopal - Erdinc Ozturk - Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2017 ARM, Inc. -Copyright 2017 The Chromium Authors. 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 Inc. 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 -OWNER 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. --------------------------------------------------------------------------------- -zlib - -version 1.2.11, January 15th, 2017 - -Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. diff --git a/TRTC-Simple-Demo/web/assets/fonts/MaterialIcons-Regular.otf b/TRTC-Simple-Demo/web/assets/fonts/MaterialIcons-Regular.otf deleted file mode 100644 index 3246ad5..0000000 Binary files a/TRTC-Simple-Demo/web/assets/fonts/MaterialIcons-Regular.otf and /dev/null differ diff --git a/TRTC-Simple-Demo/web/assets/images/avatar3_100.20191230.png b/TRTC-Simple-Demo/web/assets/images/avatar3_100.20191230.png deleted file mode 100644 index ae15b33..0000000 Binary files a/TRTC-Simple-Demo/web/assets/images/avatar3_100.20191230.png and /dev/null differ diff --git a/TRTC-Simple-Demo/web/assets/images/bg_main_title.png b/TRTC-Simple-Demo/web/assets/images/bg_main_title.png deleted file mode 100644 index 2c3b5e1..0000000 Binary files a/TRTC-Simple-Demo/web/assets/images/bg_main_title.png and /dev/null differ diff --git a/TRTC-Simple-Demo/web/assets/images/magic-line.png b/TRTC-Simple-Demo/web/assets/images/magic-line.png deleted file mode 100644 index 1c7d859..0000000 Binary files a/TRTC-Simple-Demo/web/assets/images/magic-line.png and /dev/null differ diff --git a/TRTC-Simple-Demo/web/assets/images/watermark_img.png b/TRTC-Simple-Demo/web/assets/images/watermark_img.png deleted file mode 100644 index 9911dad..0000000 Binary files a/TRTC-Simple-Demo/web/assets/images/watermark_img.png and /dev/null differ diff --git a/TRTC-Simple-Demo/web/assets/media/daoxiang.mp3 b/TRTC-Simple-Demo/web/assets/media/daoxiang.mp3 deleted file mode 100644 index b22acdb..0000000 Binary files a/TRTC-Simple-Demo/web/assets/media/daoxiang.mp3 and /dev/null differ diff --git a/TRTC-Simple-Demo/web/assets/packages/cupertino_icons/assets/CupertinoIcons.ttf b/TRTC-Simple-Demo/web/assets/packages/cupertino_icons/assets/CupertinoIcons.ttf deleted file mode 100644 index 79ba7ea..0000000 Binary files a/TRTC-Simple-Demo/web/assets/packages/cupertino_icons/assets/CupertinoIcons.ttf and /dev/null differ diff --git a/TRTC-Simple-Demo/web/favicon.png b/TRTC-Simple-Demo/web/favicon.png deleted file mode 100644 index 8aaa46a..0000000 Binary files a/TRTC-Simple-Demo/web/favicon.png and /dev/null differ diff --git a/TRTC-Simple-Demo/web/flutter_service_worker.js b/TRTC-Simple-Demo/web/flutter_service_worker.js deleted file mode 100644 index e46d6ce..0000000 --- a/TRTC-Simple-Demo/web/flutter_service_worker.js +++ /dev/null @@ -1,197 +0,0 @@ -'use strict'; -const MANIFEST = 'flutter-app-manifest'; -const TEMP = 'flutter-temp-cache'; -const CACHE_NAME = 'flutter-app-cache'; -const RESOURCES = { - "version.json": "3e3ea9e4549982078f4a47e4ba743aa1", -"index.html": "d60f50a20fbf680cfc1fcfa99a09d4c8", -"/": "d60f50a20fbf680cfc1fcfa99a09d4c8", -"main.dart.js": "4c6a5d75a90ab63d9d2ef2b4dddc803b", -"TrtcWrapper.1.1.9.bundle.js": "eba0b9b78beb359f1156dd1acbaf0dbc", -"JSGenerateTestUserSig.1.1.9.bundle.js": "b56d586adb5263ba04cdd451ec2b2b98", -"favicon.png": "5dcef449791fa27946b3d35ad8803796", -"BeautyManagerWrapper.1.1.9.bundle.js": "78355c0aea2a370b3682a7b897fe0ba6", -"icons/Icon-192.png": "ac9a721a12bbc803b44f645561ecb1e1", -"icons/Icon-512.png": "96e752610906ba2a93c65f8abe1645f1", -"manifest.json": "e10df65533a6eb264cd58ba4614364d5", -"assets/images/avatar3_100.20191230.png": "201e3ed5264548ce2a5eac15b6cc02d2", -"assets/images/watermark_img.png": "cea173f67fb0ff89536a38668066081a", -"assets/images/magic-line.png": "b60949325f5d90cc403840a69f244a51", -"assets/images/bg_main_title.png": "b6ae6278e1a48d9609da7444ee7f7b42", -"assets/AssetManifest.json": "39b6eb87158dc284b48184492630ed30", -"assets/NOTICES": "02c8d359e42be239c15b44d80e07cb04", -"assets/FontManifest.json": "dc3d03800ccca4601324923c0b1d6d57", -"assets/packages/cupertino_icons/assets/CupertinoIcons.ttf": "6d342eb68f170c97609e9da345464e5e", -"assets/fonts/MaterialIcons-Regular.otf": "4e6447691c9509f7acdbf8a931a85ca1" -}; - -// The application shell files that are downloaded before a service worker can -// start. -const CORE = [ - "/", -"main.dart.js", -"index.html", -"assets/NOTICES", -"assets/AssetManifest.json", -"assets/FontManifest.json"]; -// During install, the TEMP cache is populated with the application shell files. -self.addEventListener("install", (event) => { - self.skipWaiting(); - return event.waitUntil( - caches.open(TEMP).then((cache) => { - return cache.addAll( - CORE.map((value) => new Request(value, {'cache': 'reload'}))); - }) - ); -}); - -// During activate, the cache is populated with the temp files downloaded in -// install. If this service worker is upgrading from one with a saved -// MANIFEST, then use this to retain unchanged resource files. -self.addEventListener("activate", function(event) { - return event.waitUntil(async function() { - try { - var contentCache = await caches.open(CACHE_NAME); - var tempCache = await caches.open(TEMP); - var manifestCache = await caches.open(MANIFEST); - var manifest = await manifestCache.match('manifest'); - // When there is no prior manifest, clear the entire cache. - if (!manifest) { - await caches.delete(CACHE_NAME); - contentCache = await caches.open(CACHE_NAME); - for (var request of await tempCache.keys()) { - var response = await tempCache.match(request); - await contentCache.put(request, response); - } - await caches.delete(TEMP); - // Save the manifest to make future upgrades efficient. - await manifestCache.put('manifest', new Response(JSON.stringify(RESOURCES))); - return; - } - var oldManifest = await manifest.json(); - var origin = self.location.origin; - for (var request of await contentCache.keys()) { - var key = request.url.substring(origin.length + 1); - if (key == "") { - key = "/"; - } - // If a resource from the old manifest is not in the new cache, or if - // the MD5 sum has changed, delete it. Otherwise the resource is left - // in the cache and can be reused by the new service worker. - if (!RESOURCES[key] || RESOURCES[key] != oldManifest[key]) { - await contentCache.delete(request); - } - } - // Populate the cache with the app shell TEMP files, potentially overwriting - // cache files preserved above. - for (var request of await tempCache.keys()) { - var response = await tempCache.match(request); - await contentCache.put(request, response); - } - await caches.delete(TEMP); - // Save the manifest to make future upgrades efficient. - await manifestCache.put('manifest', new Response(JSON.stringify(RESOURCES))); - return; - } catch (err) { - // On an unhandled exception the state of the cache cannot be guaranteed. - console.error('Failed to upgrade service worker: ' + err); - await caches.delete(CACHE_NAME); - await caches.delete(TEMP); - await caches.delete(MANIFEST); - } - }()); -}); - -// The fetch handler redirects requests for RESOURCE files to the service -// worker cache. -self.addEventListener("fetch", (event) => { - if (event.request.method !== 'GET') { - return; - } - var origin = self.location.origin; - var key = event.request.url.substring(origin.length + 1); - // Redirect URLs to the index.html - if (key.indexOf('?v=') != -1) { - key = key.split('?v=')[0]; - } - if (event.request.url == origin || event.request.url.startsWith(origin + '/#') || key == '') { - key = '/'; - } - // If the URL is not the RESOURCE list then return to signal that the - // browser should take over. - if (!RESOURCES[key]) { - return; - } - // If the URL is the index.html, perform an online-first request. - if (key == '/') { - return onlineFirst(event); - } - event.respondWith(caches.open(CACHE_NAME) - .then((cache) => { - return cache.match(event.request).then((response) => { - // Either respond with the cached resource, or perform a fetch and - // lazily populate the cache. - return response || fetch(event.request).then((response) => { - cache.put(event.request, response.clone()); - return response; - }); - }) - }) - ); -}); - -self.addEventListener('message', (event) => { - // SkipWaiting can be used to immediately activate a waiting service worker. - // This will also require a page refresh triggered by the main worker. - if (event.data === 'skipWaiting') { - self.skipWaiting(); - return; - } - if (event.data === 'downloadOffline') { - downloadOffline(); - return; - } -}); - -// Download offline will check the RESOURCES for all files not in the cache -// and populate them. -async function downloadOffline() { - var resources = []; - var contentCache = await caches.open(CACHE_NAME); - var currentContent = {}; - for (var request of await contentCache.keys()) { - var key = request.url.substring(origin.length + 1); - if (key == "") { - key = "/"; - } - currentContent[key] = true; - } - for (var resourceKey of Object.keys(RESOURCES)) { - if (!currentContent[resourceKey]) { - resources.push(resourceKey); - } - } - return contentCache.addAll(resources); -} - -// Attempt to download the resource online before falling back to -// the offline cache. -function onlineFirst(event) { - return event.respondWith( - fetch(event.request).then((response) => { - return caches.open(CACHE_NAME).then((cache) => { - cache.put(event.request, response.clone()); - return response; - }); - }).catch((error) => { - return caches.open(CACHE_NAME).then((cache) => { - return cache.match(event.request).then((response) => { - if (response != null) { - return response; - } - throw error; - }); - }); - }) - ); -} diff --git a/TRTC-Simple-Demo/web/icons/Icon-192.png b/TRTC-Simple-Demo/web/icons/Icon-192.png deleted file mode 100644 index b749bfe..0000000 Binary files a/TRTC-Simple-Demo/web/icons/Icon-192.png and /dev/null differ diff --git a/TRTC-Simple-Demo/web/icons/Icon-512.png b/TRTC-Simple-Demo/web/icons/Icon-512.png deleted file mode 100644 index 88cfd48..0000000 Binary files a/TRTC-Simple-Demo/web/icons/Icon-512.png and /dev/null differ diff --git a/TRTC-Simple-Demo/web/index.html b/TRTC-Simple-Demo/web/index.html deleted file mode 100644 index df23f48..0000000 --- a/TRTC-Simple-Demo/web/index.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - Multi -person video conference - - - - - - - - - diff --git a/TRTC-Simple-Demo/web/js/JsGenerateTestUserSig.2.0.0-dev.0.0.2.bundle.js b/TRTC-Simple-Demo/web/js/JsGenerateTestUserSig.2.0.0-dev.0.0.2.bundle.js deleted file mode 100644 index 1f09575..0000000 --- a/TRTC-Simple-Demo/web/js/JsGenerateTestUserSig.2.0.0-dev.0.0.2.bundle.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.JsGenerateTestUserSig=t():e.JsGenerateTestUserSig=t()}(self,(()=>(()=>{var e={297:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=n(r(56)),o=function(){function e(){}return e.prototype.jsGenTestUserSig=function(e,t,r,n){return new i.default(e,t,n).genTestUserSig(r)},e}();t.default=o},56:function(e,t,r){e.exports=function(){"use strict";var e=void 0!==r.g?r.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},t=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o=!1;function s(){o=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=0,i=e.length;r>18&63]+t[o>>12&63]+t[o>>6&63]+t[63&o]);return s.join("")}function h(e){var r;o||s();for(var n=e.length,i=n%3,h="",l=[],f=0,c=n-i;fc?c:f+16383));return 1===i?(r=e[n-1],h+=t[r>>2],h+=t[r<<4&63],h+="=="):2===i&&(r=(e[n-2]<<8)+e[n-1],h+=t[r>>10],h+=t[r>>4&63],h+=t[r<<2&63],h+="="),l.push(h),l.join("")}function l(e,t,r,n,i){var o,s,a=8*i-n-1,h=(1<>1,f=-7,c=r?i-1:0,u=r?-1:1,d=e[t+c];for(c+=u,o=d&(1<<-f)-1,d>>=-f,f+=a;f>0;o=256*o+e[t+c],c+=u,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=n;f>0;s=256*s+e[t+c],c+=u,f-=8);if(0===o)o=1-l;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,n),o-=l}return(d?-1:1)*s*Math.pow(2,o-n)}function f(e,t,r,n,i,o){var s,a,h,l=8*o-i-1,f=(1<>1,u=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:o-1,p=n?1:-1,_=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=f):(s=Math.floor(Math.log(t)/Math.LN2),t*(h=Math.pow(2,-s))<1&&(s--,h*=2),(t+=s+c>=1?u/h:u*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=f?(a=0,s=f):s+c>=1?(a=(t*h-1)*Math.pow(2,i),s+=c):(a=t*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;e[r+d]=255&a,d+=p,a/=256,i-=8);for(s=s<0;e[r+d]=255&s,d+=p,s/=256,l-=8);e[r+d-p]|=128*_}var c={}.toString,u=Array.isArray||function(e){return"[object Array]"==c.call(e)};function d(){return _.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function p(e,t){if(d()=d())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+d().toString(16)+" bytes");return 0|e}function m(e){return!(null==e||!e._isBuffer)}function k(e,t){if(m(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return V(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return G(e).length;default:if(n)return V(e).length;t=(""+t).toLowerCase(),n=!0}}function E(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return U(this,t,r);case"utf8":case"utf-8":return D(this,t,r);case"ascii":return P(this,t,r);case"latin1":case"binary":return O(this,t,r);case"base64":return C(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return H(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function x(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function S(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=_.from(t,n)),m(t))return 0===t.length?-1:R(e,t,r,n,i);if("number"==typeof t)return t&=255,_.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):R(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function R(e,t,r,n,i){var o,s=1,a=e.length,h=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,h/=2,r/=2}function l(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var f=-1;for(o=r;oa&&(r=a-h),o=r;o>=0;o--){for(var c=!0,u=0;ui&&(n=i):n=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function C(e,t,r){return 0===t&&r===e.length?h(e):h(e.slice(t,r))}function D(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:l>223?3:l>191?2:1;if(i+c<=r)switch(c){case 1:l<128&&(f=l);break;case 2:128==(192&(o=e[i+1]))&&(h=(31&l)<<6|63&o)>127&&(f=h);break;case 3:o=e[i+1],s=e[i+2],128==(192&o)&&128==(192&s)&&(h=(15&l)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(f=h);break;case 4:o=e[i+1],s=e[i+2],a=e[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(f=h)}null===f?(f=65533,c=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),i+=c}return function(e){var t=e.length;if(t<=I)return String.fromCharCode.apply(String,e);for(var r="",n=0;n0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),""},_.prototype.compare=function(e,t,r,n,i){if(!m(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(t>>>=0),a=Math.min(o,s),h=this.slice(n,i),l=e.slice(t,r),f=0;fi)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return A(this,e,t,r);case"utf8":case"utf-8":return B(this,e,t,r);case"ascii":return z(this,e,t,r);case"latin1":case"binary":return L(this,e,t,r);case"base64":return T(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},_.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var I=4096;function P(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i="",o=t;or)throw new RangeError("Trying to access beyond buffer length")}function N(e,t,r,n,i,o){if(!m(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function Z(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-r,2);i>>8*(n?i:1-i)}function j(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-r,4);i>>8*(n?i:3-i)&255}function W(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function Y(e,t,r,n,i){return i||W(e,0,r,4),f(e,t,r,n,23,4),r+4}function K(e,t,r,n,i){return i||W(e,0,r,8),f(e,t,r,n,52,8),r+8}_.prototype.slice=function(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(i*=256);)n+=this[e+--t]*i;return n},_.prototype.readUInt8=function(e,t){return t||F(e,1,this.length),this[e]},_.prototype.readUInt16LE=function(e,t){return t||F(e,2,this.length),this[e]|this[e+1]<<8},_.prototype.readUInt16BE=function(e,t){return t||F(e,2,this.length),this[e]<<8|this[e+1]},_.prototype.readUInt32LE=function(e,t){return t||F(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},_.prototype.readUInt32BE=function(e,t){return t||F(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},_.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||F(e,t,this.length);for(var n=this[e],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*t)),n},_.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||F(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},_.prototype.readInt8=function(e,t){return t||F(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},_.prototype.readInt16LE=function(e,t){t||F(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},_.prototype.readInt16BE=function(e,t){t||F(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},_.prototype.readInt32LE=function(e,t){return t||F(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},_.prototype.readInt32BE=function(e,t){return t||F(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},_.prototype.readFloatLE=function(e,t){return t||F(e,4,this.length),l(this,e,!0,23,4)},_.prototype.readFloatBE=function(e,t){return t||F(e,4,this.length),l(this,e,!1,23,4)},_.prototype.readDoubleLE=function(e,t){return t||F(e,8,this.length),l(this,e,!0,52,8)},_.prototype.readDoubleBE=function(e,t){return t||F(e,8,this.length),l(this,e,!1,52,8)},_.prototype.writeUIntLE=function(e,t,r,n){e=+e,t|=0,r|=0,n||N(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+i]=e/o&255;return t+r},_.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||N(this,e,t,1,255,0),_.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},_.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||N(this,e,t,2,65535,0),_.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):Z(this,e,t,!0),t+2},_.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||N(this,e,t,2,65535,0),_.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):Z(this,e,t,!1),t+2},_.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||N(this,e,t,4,4294967295,0),_.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):j(this,e,t,!0),t+4},_.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||N(this,e,t,4,4294967295,0),_.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):j(this,e,t,!1),t+4},_.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);N(this,e,t,r,i-1,-i)}var o=0,s=1,a=0;for(this[t]=255&e;++o>0)-a&255;return t+r},_.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);N(this,e,t,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[t+o]=255&e;--o>=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s>>0)-a&255;return t+r},_.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||N(this,e,t,1,127,-128),_.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},_.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||N(this,e,t,2,32767,-32768),_.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):Z(this,e,t,!0),t+2},_.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||N(this,e,t,2,32767,-32768),_.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):Z(this,e,t,!1),t+2},_.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||N(this,e,t,4,2147483647,-2147483648),_.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):j(this,e,t,!0),t+4},_.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||N(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),_.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):j(this,e,t,!1),t+4},_.prototype.writeFloatLE=function(e,t,r){return Y(this,e,t,!0,r)},_.prototype.writeFloatBE=function(e,t,r){return Y(this,e,t,!1,r)},_.prototype.writeDoubleLE=function(e,t,r){return K(this,e,t,!0,r)},_.prototype.writeDoubleBE=function(e,t,r){return K(this,e,t,!1,r)},_.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(o<1e3||!_.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function G(e){return function(e){var t,r,a,h,l,f;o||s();var c=e.length;if(c%4>0)throw new Error("Invalid string. Length must be a multiple of 4");l="="===e[c-2]?2:"="===e[c-1]?1:0,f=new i(3*c/4-l),a=l>0?c-4:c;var u=0;for(t=0,r=0;t>16&255,f[u++]=h>>8&255,f[u++]=255&h;return 2===l?(h=n[e.charCodeAt(t)]<<2|n[e.charCodeAt(t+1)]>>4,f[u++]=255&h):1===l&&(h=n[e.charCodeAt(t)]<<10|n[e.charCodeAt(t+1)]<<4|n[e.charCodeAt(t+2)]>>2,f[u++]=h>>8&255,f[u++]=255&h),f}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(X,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function J(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function $(e){return null!=e&&(!!e._isBuffer||Q(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&Q(e.slice(0,0))}(e))}function Q(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function ee(e,t){return e(t={exports:{}},t.exports),t.exports}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==r.g?r.g:"undefined"!=typeof self&&self;var te=ee((function(e,t){var r;e.exports=(r=r||function(e,t){var r=Object.create||function(){function e(){}return function(t){var r;return e.prototype=t,r=new e,e.prototype=null,r}}(),n={},i=n.lib={},o=i.Base={extend:function(e){var t=r(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},s=i.WordArray=o.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||h).stringify(this)},concat:function(e){var t=this.words,r=e.words,n=this.sigBytes,i=e.sigBytes;if(this.clamp(),n%4)for(var o=0;o>>2]>>>24-o%4*8&255;t[n+o>>>2]|=s<<24-(n+o)%4*8}else for(o=0;o>>2]=r[o>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,r=this.sigBytes;t[r>>>2]&=4294967295<<32-r%4*8,t.length=e.ceil(r/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var r,n=[],i=function(t){var r=987654321,n=4294967295;return function(){var i=((r=36969*(65535&r)+(r>>16)&n)<<16)+(t=18e3*(65535&t)+(t>>16)&n)&n;return i/=4294967296,(i+=.5)*(e.random()>.5?1:-1)}},o=0;o>>2]>>>24-i%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new s.init(r,t/2)}},l=a.Latin1={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new s.init(r,t)}},f=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(l.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return l.parse(unescape(encodeURIComponent(e)))}},c=i.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=f.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var r=this._data,n=r.words,i=r.sigBytes,o=this.blockSize,a=i/(4*o),h=(a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0))*o,l=e.min(4*h,i);if(h){for(var f=0;f>>2]|=e[i]<<24-i%4*8;t.call(this,n,r)}else t.apply(this,arguments)}).prototype=e}}(),r.lib.WordArray)})),ee((function(e,t){var r;e.exports=(r=te,function(){var e=r,t=e.lib.WordArray,n=e.enc;function i(e){return e<<8&4278255360|e>>>8&16711935}n.Utf16=n.Utf16BE={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;i>>2]>>>16-i%4*8&65535;n.push(String.fromCharCode(o))}return n.join("")},parse:function(e){for(var r=e.length,n=[],i=0;i>>1]|=e.charCodeAt(i)<<16-i%2*16;return t.create(n,2*r)}},n.Utf16LE={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],o=0;o>>2]>>>16-o%4*8&65535);n.push(String.fromCharCode(s))}return n.join("")},parse:function(e){for(var r=e.length,n=[],o=0;o>>1]|=i(e.charCodeAt(o)<<16-o%2*16);return t.create(n,2*r)}}}(),r.enc.Utf16)})),ee((function(e,t){var r,n,i;e.exports=(i=(n=r=te).lib.WordArray,n.enc.Base64={stringify:function(e){var t=e.words,r=e.sigBytes,n=this._map;e.clamp();for(var i=[],o=0;o>>2]>>>24-o%4*8&255)<<16|(t[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|t[o+2>>>2]>>>24-(o+2)%4*8&255,a=0;a<4&&o+.75*a>>6*(3-a)&63));var h=n.charAt(64);if(h)for(;i.length%4;)i.push(h);return i.join("")},parse:function(e){var t=e.length,r=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var o=0;o>>6-s%4*2;n[o>>>2]|=(a|h)<<24-o%4*8,o++}return i.create(n,o)}(e,t,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},r.enc.Base64)})),ee((function(e,t){var r;e.exports=(r=te,function(e){var t=r,n=t.lib,i=n.WordArray,o=n.Hasher,s=t.algo,a=[];!function(){for(var t=0;t<64;t++)a[t]=4294967296*e.abs(e.sin(t+1))|0}();var h=s.MD5=o.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var r=0;r<16;r++){var n=t+r,i=e[n];e[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var o=this._hash.words,s=e[t+0],h=e[t+1],d=e[t+2],p=e[t+3],_=e[t+4],g=e[t+5],v=e[t+6],w=e[t+7],b=e[t+8],y=e[t+9],m=e[t+10],k=e[t+11],E=e[t+12],x=e[t+13],S=e[t+14],R=e[t+15],A=o[0],B=o[1],z=o[2],L=o[3];A=l(A,B,z,L,s,7,a[0]),L=l(L,A,B,z,h,12,a[1]),z=l(z,L,A,B,d,17,a[2]),B=l(B,z,L,A,p,22,a[3]),A=l(A,B,z,L,_,7,a[4]),L=l(L,A,B,z,g,12,a[5]),z=l(z,L,A,B,v,17,a[6]),B=l(B,z,L,A,w,22,a[7]),A=l(A,B,z,L,b,7,a[8]),L=l(L,A,B,z,y,12,a[9]),z=l(z,L,A,B,m,17,a[10]),B=l(B,z,L,A,k,22,a[11]),A=l(A,B,z,L,E,7,a[12]),L=l(L,A,B,z,x,12,a[13]),z=l(z,L,A,B,S,17,a[14]),A=f(A,B=l(B,z,L,A,R,22,a[15]),z,L,h,5,a[16]),L=f(L,A,B,z,v,9,a[17]),z=f(z,L,A,B,k,14,a[18]),B=f(B,z,L,A,s,20,a[19]),A=f(A,B,z,L,g,5,a[20]),L=f(L,A,B,z,m,9,a[21]),z=f(z,L,A,B,R,14,a[22]),B=f(B,z,L,A,_,20,a[23]),A=f(A,B,z,L,y,5,a[24]),L=f(L,A,B,z,S,9,a[25]),z=f(z,L,A,B,p,14,a[26]),B=f(B,z,L,A,b,20,a[27]),A=f(A,B,z,L,x,5,a[28]),L=f(L,A,B,z,d,9,a[29]),z=f(z,L,A,B,w,14,a[30]),A=c(A,B=f(B,z,L,A,E,20,a[31]),z,L,g,4,a[32]),L=c(L,A,B,z,b,11,a[33]),z=c(z,L,A,B,k,16,a[34]),B=c(B,z,L,A,S,23,a[35]),A=c(A,B,z,L,h,4,a[36]),L=c(L,A,B,z,_,11,a[37]),z=c(z,L,A,B,w,16,a[38]),B=c(B,z,L,A,m,23,a[39]),A=c(A,B,z,L,x,4,a[40]),L=c(L,A,B,z,s,11,a[41]),z=c(z,L,A,B,p,16,a[42]),B=c(B,z,L,A,v,23,a[43]),A=c(A,B,z,L,y,4,a[44]),L=c(L,A,B,z,E,11,a[45]),z=c(z,L,A,B,R,16,a[46]),A=u(A,B=c(B,z,L,A,d,23,a[47]),z,L,s,6,a[48]),L=u(L,A,B,z,w,10,a[49]),z=u(z,L,A,B,S,15,a[50]),B=u(B,z,L,A,g,21,a[51]),A=u(A,B,z,L,E,6,a[52]),L=u(L,A,B,z,p,10,a[53]),z=u(z,L,A,B,m,15,a[54]),B=u(B,z,L,A,h,21,a[55]),A=u(A,B,z,L,b,6,a[56]),L=u(L,A,B,z,R,10,a[57]),z=u(z,L,A,B,v,15,a[58]),B=u(B,z,L,A,x,21,a[59]),A=u(A,B,z,L,_,6,a[60]),L=u(L,A,B,z,k,10,a[61]),z=u(z,L,A,B,d,15,a[62]),B=u(B,z,L,A,y,21,a[63]),o[0]=o[0]+A|0,o[1]=o[1]+B|0,o[2]=o[2]+z|0,o[3]=o[3]+L|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,i=8*t.sigBytes;r[i>>>5]|=128<<24-i%32;var o=e.floor(n/4294967296),s=n;r[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),r[14+(i+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),t.sigBytes=4*(r.length+1),this._process();for(var a=this._hash,h=a.words,l=0;l<4;l++){var f=h[l];h[l]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}return a},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function l(e,t,r,n,i,o,s){var a=e+(t&r|~t&n)+i+s;return(a<>>32-o)+t}function f(e,t,r,n,i,o,s){var a=e+(t&n|r&~n)+i+s;return(a<>>32-o)+t}function c(e,t,r,n,i,o,s){var a=e+(t^r^n)+i+s;return(a<>>32-o)+t}function u(e,t,r,n,i,o,s){var a=e+(r^(t|~n))+i+s;return(a<>>32-o)+t}t.MD5=o._createHelper(h),t.HmacMD5=o._createHmacHelper(h)}(Math),r.MD5)})),ee((function(e,t){var r,n,i,o,s,a,h,l;e.exports=(i=(n=r=te).lib,o=i.WordArray,s=i.Hasher,a=n.algo,h=[],l=a.SHA1=s.extend({_doReset:function(){this._hash=new o.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],l=0;l<80;l++){if(l<16)h[l]=0|e[t+l];else{var f=h[l-3]^h[l-8]^h[l-14]^h[l-16];h[l]=f<<1|f>>>31}var c=(n<<5|n>>>27)+a+h[l];c+=l<20?1518500249+(i&o|~i&s):l<40?1859775393+(i^o^s):l<60?(i&o|i&s|o&s)-1894007588:(i^o^s)-899497514,a=s,s=o,o=i<<30|i>>>2,i=n,n=c}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+a|0},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,n=8*e.sigBytes;return t[n>>>5]|=128<<24-n%32,t[14+(n+64>>>9<<4)]=Math.floor(r/4294967296),t[15+(n+64>>>9<<4)]=r,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}}),n.SHA1=s._createHelper(l),n.HmacSHA1=s._createHmacHelper(l),r.SHA1)})),ee((function(e,t){var r;e.exports=(r=te,function(e){var t=r,n=t.lib,i=n.WordArray,o=n.Hasher,s=t.algo,a=[],h=[];!function(){function t(t){for(var r=e.sqrt(t),n=2;n<=r;n++)if(!(t%n))return!1;return!0}function r(e){return 4294967296*(e-(0|e))|0}for(var n=2,i=0;i<64;)t(n)&&(i<8&&(a[i]=r(e.pow(n,.5))),h[i]=r(e.pow(n,1/3)),i++),n++}();var l=[],f=s.SHA256=o.extend({_doReset:function(){this._hash=new i.init(a.slice(0))},_doProcessBlock:function(e,t){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],f=r[5],c=r[6],u=r[7],d=0;d<64;d++){if(d<16)l[d]=0|e[t+d];else{var p=l[d-15],_=(p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3,g=l[d-2],v=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;l[d]=_+l[d-7]+v+l[d-16]}var w=n&i^n&o^i&o,b=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),y=u+((a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25))+(a&f^~a&c)+h[d]+l[d];u=c,c=f,f=a,a=s+y|0,s=o,o=i,i=n,n=y+(b+w)|0}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+a|0,r[5]=r[5]+f|0,r[6]=r[6]+c|0,r[7]=r[7]+u|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,i=8*t.sigBytes;return r[i>>>5]|=128<<24-i%32,r[14+(i+64>>>9<<4)]=e.floor(n/4294967296),r[15+(i+64>>>9<<4)]=n,t.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(f),t.HmacSHA256=o._createHmacHelper(f)}(Math),r.SHA256)})),ee((function(e,t){var r,n,i,o,s,a;e.exports=(i=(n=r=te).lib.WordArray,o=n.algo,s=o.SHA256,a=o.SHA224=s.extend({_doReset:function(){this._hash=new i.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var e=s._doFinalize.call(this);return e.sigBytes-=4,e}}),n.SHA224=s._createHelper(a),n.HmacSHA224=s._createHmacHelper(a),r.SHA224)})),ee((function(e,t){var r;e.exports=(r=te,function(){var e=r,t=e.lib.Hasher,n=e.x64,i=n.Word,o=n.WordArray,s=e.algo;function a(){return i.create.apply(i,arguments)}var h=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),a(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),a(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],l=[];!function(){for(var e=0;e<80;e++)l[e]=a()}();var f=s.SHA512=t.extend({_doReset:function(){this._hash=new o.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(e,t){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],f=r[5],c=r[6],u=r[7],d=n.high,p=n.low,_=i.high,g=i.low,v=o.high,w=o.low,b=s.high,y=s.low,m=a.high,k=a.low,E=f.high,x=f.low,S=c.high,R=c.low,A=u.high,B=u.low,z=d,L=p,T=_,M=g,C=v,D=w,I=b,P=y,O=m,U=k,H=E,F=x,N=S,Z=R,j=A,W=B,Y=0;Y<80;Y++){var K=l[Y];if(Y<16)var X=K.high=0|e[t+2*Y],q=K.low=0|e[t+2*Y+1];else{var V=l[Y-15],G=V.high,J=V.low,$=(G>>>1|J<<31)^(G>>>8|J<<24)^G>>>7,Q=(J>>>1|G<<31)^(J>>>8|G<<24)^(J>>>7|G<<25),ee=l[Y-2],te=ee.high,re=ee.low,ne=(te>>>19|re<<13)^(te<<3|re>>>29)^te>>>6,ie=(re>>>19|te<<13)^(re<<3|te>>>29)^(re>>>6|te<<26),oe=l[Y-7],se=oe.high,ae=oe.low,he=l[Y-16],le=he.high,fe=he.low;X=(X=(X=$+se+((q=Q+ae)>>>0>>0?1:0))+ne+((q+=ie)>>>0>>0?1:0))+le+((q+=fe)>>>0>>0?1:0),K.high=X,K.low=q}var ce,ue=O&H^~O&N,de=U&F^~U&Z,pe=z&T^z&C^T&C,_e=L&M^L&D^M&D,ge=(z>>>28|L<<4)^(z<<30|L>>>2)^(z<<25|L>>>7),ve=(L>>>28|z<<4)^(L<<30|z>>>2)^(L<<25|z>>>7),we=(O>>>14|U<<18)^(O>>>18|U<<14)^(O<<23|U>>>9),be=(U>>>14|O<<18)^(U>>>18|O<<14)^(U<<23|O>>>9),ye=h[Y],me=ye.high,ke=ye.low,Ee=j+we+((ce=W+be)>>>0>>0?1:0),xe=ve+_e;j=N,W=Z,N=H,Z=F,H=O,F=U,O=I+(Ee=(Ee=(Ee=Ee+ue+((ce+=de)>>>0>>0?1:0))+me+((ce+=ke)>>>0>>0?1:0))+X+((ce+=q)>>>0>>0?1:0))+((U=P+ce|0)>>>0

>>0?1:0)|0,I=C,P=D,C=T,D=M,T=z,M=L,z=Ee+(ge+pe+(xe>>>0>>0?1:0))+((L=ce+xe|0)>>>0>>0?1:0)|0}p=n.low=p+L,n.high=d+z+(p>>>0>>0?1:0),g=i.low=g+M,i.high=_+T+(g>>>0>>0?1:0),w=o.low=w+D,o.high=v+C+(w>>>0>>0?1:0),y=s.low=y+P,s.high=b+I+(y>>>0

>>0?1:0),k=a.low=k+U,a.high=m+O+(k>>>0>>0?1:0),x=f.low=x+F,f.high=E+H+(x>>>0>>0?1:0),R=c.low=R+Z,c.high=S+N+(R>>>0>>0?1:0),B=u.low=B+W,u.high=A+j+(B>>>0>>0?1:0)},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,n=8*e.sigBytes;return t[n>>>5]|=128<<24-n%32,t[30+(n+128>>>10<<5)]=Math.floor(r/4294967296),t[31+(n+128>>>10<<5)]=r,e.sigBytes=4*t.length,this._process(),this._hash.toX32()},clone:function(){var e=t.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32});e.SHA512=t._createHelper(f),e.HmacSHA512=t._createHmacHelper(f)}(),r.SHA512)})),ee((function(e,t){var r,n,i,o,s,a,h,l;e.exports=(i=(n=r=te).x64,o=i.Word,s=i.WordArray,a=n.algo,h=a.SHA512,l=a.SHA384=h.extend({_doReset:function(){this._hash=new s.init([new o.init(3418070365,3238371032),new o.init(1654270250,914150663),new o.init(2438529370,812702999),new o.init(355462360,4144912697),new o.init(1731405415,4290775857),new o.init(2394180231,1750603025),new o.init(3675008525,1694076839),new o.init(1203062813,3204075428)])},_doFinalize:function(){var e=h._doFinalize.call(this);return e.sigBytes-=16,e}}),n.SHA384=h._createHelper(l),n.HmacSHA384=h._createHmacHelper(l),r.SHA384)})),ee((function(e,t){var r;e.exports=(r=te,function(e){var t=r,n=t.lib,i=n.WordArray,o=n.Hasher,s=t.x64.Word,a=t.algo,h=[],l=[],f=[];!function(){for(var e=1,t=0,r=0;r<24;r++){h[e+5*t]=(r+1)*(r+2)/2%64;var n=(2*e+3*t)%5;e=t%5,t=n}for(e=0;e<5;e++)for(t=0;t<5;t++)l[e+5*t]=t+(2*e+3*t)%5*5;for(var i=1,o=0;o<24;o++){for(var a=0,c=0,u=0;u<7;u++){if(1&i){var d=(1<>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(B=r[i]).high^=s,B.low^=o}for(var a=0;a<24;a++){for(var u=0;u<5;u++){for(var d=0,p=0,_=0;_<5;_++)d^=(B=r[u+5*_]).high,p^=B.low;var g=c[u];g.high=d,g.low=p}for(u=0;u<5;u++){var v=c[(u+4)%5],w=c[(u+1)%5],b=w.high,y=w.low;for(d=v.high^(b<<1|y>>>31),p=v.low^(y<<1|b>>>31),_=0;_<5;_++)(B=r[u+5*_]).high^=d,B.low^=p}for(var m=1;m<25;m++){var k=(B=r[m]).high,E=B.low,x=h[m];x<32?(d=k<>>32-x,p=E<>>32-x):(d=E<>>64-x,p=k<>>64-x);var S=c[l[m]];S.high=d,S.low=p}var R=c[0],A=r[0];for(R.high=A.high,R.low=A.low,u=0;u<5;u++)for(_=0;_<5;_++){var B=r[m=u+5*_],z=c[m],L=c[(u+1)%5+5*_],T=c[(u+2)%5+5*_];B.high=z.high^~L.high&T.high,B.low=z.low^~L.low&T.low}B=r[0];var M=f[a];B.high^=M.high,B.low^=M.low}},_doFinalize:function(){var t=this._data,r=t.words,n=(this._nDataBytes,8*t.sigBytes),o=32*this.blockSize;r[n>>>5]|=1<<24-n%32,r[(e.ceil((n+1)/o)*o>>>5)-1]|=128,t.sigBytes=4*r.length,this._process();for(var s=this._state,a=this.cfg.outputLength/8,h=a/8,l=[],f=0;f>>24)|4278255360&(u<<24|u>>>8),d=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8),l.push(d),l.push(u)}return new i.init(l,a)},clone:function(){for(var e=o.clone.call(this),t=e._state=this._state.slice(0),r=0;r<25;r++)t[r]=t[r].clone();return e}});t.SHA3=o._createHelper(u),t.HmacSHA3=o._createHmacHelper(u)}(Math),r.SHA3)})),ee((function(e,t){var r;e.exports=(r=te,function(e){var t=r,n=t.lib,i=n.WordArray,o=n.Hasher,s=t.algo,a=i.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),h=i.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),l=i.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),f=i.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),c=i.create([0,1518500249,1859775393,2400959708,2840853838]),u=i.create([1352829926,1548603684,1836072691,2053994217,0]),d=s.RIPEMD160=o.extend({_doReset:function(){this._hash=i.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var r=0;r<16;r++){var n=t+r,i=e[n];e[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var o,s,d,y,m,k,E,x,S,R,A,B=this._hash.words,z=c.words,L=u.words,T=a.words,M=h.words,C=l.words,D=f.words;for(k=o=B[0],E=s=B[1],x=d=B[2],S=y=B[3],R=m=B[4],r=0;r<80;r+=1)A=o+e[t+T[r]]|0,A+=r<16?p(s,d,y)+z[0]:r<32?_(s,d,y)+z[1]:r<48?g(s,d,y)+z[2]:r<64?v(s,d,y)+z[3]:w(s,d,y)+z[4],A=(A=b(A|=0,C[r]))+m|0,o=m,m=y,y=b(d,10),d=s,s=A,A=k+e[t+M[r]]|0,A+=r<16?w(E,x,S)+L[0]:r<32?v(E,x,S)+L[1]:r<48?g(E,x,S)+L[2]:r<64?_(E,x,S)+L[3]:p(E,x,S)+L[4],A=(A=b(A|=0,D[r]))+R|0,k=R,R=S,S=b(x,10),x=E,E=A;A=B[1]+d+S|0,B[1]=B[2]+y+R|0,B[2]=B[3]+m+k|0,B[3]=B[4]+o+E|0,B[4]=B[0]+s+x|0,B[0]=A},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,n=8*e.sigBytes;t[n>>>5]|=128<<24-n%32,t[14+(n+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),e.sigBytes=4*(t.length+1),this._process();for(var i=this._hash,o=i.words,s=0;s<5;s++){var a=o[s];o[s]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}return i},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function p(e,t,r){return e^t^r}function _(e,t,r){return e&t|~e&r}function g(e,t,r){return(e|~t)^r}function v(e,t,r){return e&r|t&~r}function w(e,t,r){return e^(t|~r)}function b(e,t){return e<>>32-t}t.RIPEMD160=o._createHelper(d),t.HmacRIPEMD160=o._createHmacHelper(d)}(),r.RIPEMD160)})),ee((function(e,t){var r,n,i,o;e.exports=(n=(r=te).lib.Base,i=r.enc,o=i.Utf8,void(r.algo.HMAC=n.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=o.parse(t));var r=e.blockSize,n=4*r;t.sigBytes>n&&(t=e.finalize(t)),t.clamp();for(var i=this._oKey=t.clone(),s=this._iKey=t.clone(),a=i.words,h=s.words,l=0;l>>2];e.sigBytes-=t}},i.BlockCipher=u.extend({cfg:u.cfg.extend({mode:_,padding:v}),reset:function(){u.reset.call(this);var e=this.cfg,t=e.iv,r=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=r.createEncryptor;else n=r.createDecryptor,this._minBufferSize=1;this._mode&&this._mode.__creator==n?this._mode.init(this,t&&t.words):(this._mode=n.call(r,this,t&&t.words),this._mode.__creator=n)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4}),w=i.CipherParams=o.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),b=n.format={},y=b.OpenSSL={stringify:function(e){var t=e.ciphertext,r=e.salt;if(r)var n=s.create([1398893684,1701076831]).concat(r).concat(t);else n=t;return n.toString(l)},parse:function(e){var t=l.parse(e),r=t.words;if(1398893684==r[0]&&1701076831==r[1]){var n=s.create(r.slice(2,4));r.splice(0,4),t.sigBytes-=16}return w.create({ciphertext:t,salt:n})}},m=i.SerializableCipher=o.extend({cfg:o.extend({format:y}),encrypt:function(e,t,r,n){n=this.cfg.extend(n);var i=e.createEncryptor(r,n),o=i.finalize(t),s=i.cfg;return w.create({ciphertext:o,key:r,iv:s.iv,algorithm:e,mode:s.mode,padding:s.padding,blockSize:e.blockSize,formatter:n.format})},decrypt:function(e,t,r,n){return n=this.cfg.extend(n),t=this._parse(t,n.format),e.createDecryptor(r,n).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),k=n.kdf={},E=k.OpenSSL={execute:function(e,t,r,n){n||(n=s.random(8));var i=c.create({keySize:t+r}).compute(e,n),o=s.create(i.words.slice(t),4*r);return i.sigBytes=4*t,w.create({key:i,iv:o,salt:n})}},x=i.PasswordBasedCipher=m.extend({cfg:m.cfg.extend({kdf:E}),encrypt:function(e,t,r,n){var i=(n=this.cfg.extend(n)).kdf.execute(r,e.keySize,e.ivSize);n.iv=i.iv;var o=m.encrypt.call(this,e,t,i.key,n);return o.mixIn(i),o},decrypt:function(e,t,r,n){n=this.cfg.extend(n),t=this._parse(t,n.format);var i=n.kdf.execute(r,e.keySize,e.ivSize,t.salt);return n.iv=i.iv,m.decrypt.call(this,e,t,i.key,n)}})))})),ee((function(e,t){var r;e.exports=((r=te).mode.CFB=function(){var e=r.lib.BlockCipherMode.extend();function t(e,t,r,n){var i=this._iv;if(i){var o=i.slice(0);this._iv=void 0}else o=this._prevBlock;n.encryptBlock(o,0);for(var s=0;s>24&255)){var t=e>>16&255,r=e>>8&255,n=255&e;255===t?(t=0,255===r?(r=0,255===n?n=0:++n):++r):++t,e=0,e+=t<<16,e+=r<<8,e+=n}else e+=1<<24;return e}var n=e.Encryptor=e.extend({processBlock:function(e,r){var n=this._cipher,i=n.blockSize,o=this._iv,s=this._counter;o&&(s=this._counter=o.slice(0),this._iv=void 0),function(e){0===(e[0]=t(e[0]))&&(e[1]=t(e[1]))}(s);var a=s.slice(0);n.encryptBlock(a,0);for(var h=0;h>>2]|=i<<24-o%4*8,e.sigBytes+=i},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},r.pad.Ansix923)})),ee((function(e,t){var r;e.exports=((r=te).pad.Iso10126={pad:function(e,t){var n=4*t,i=n-e.sigBytes%n;e.concat(r.lib.WordArray.random(i-1)).concat(r.lib.WordArray.create([i<<24],1))},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},r.pad.Iso10126)})),ee((function(e,t){var r;e.exports=((r=te).pad.Iso97971={pad:function(e,t){e.concat(r.lib.WordArray.create([2147483648],1)),r.pad.ZeroPadding.pad(e,t)},unpad:function(e){r.pad.ZeroPadding.unpad(e),e.sigBytes--}},r.pad.Iso97971)})),ee((function(e,t){var r;e.exports=((r=te).pad.ZeroPadding={pad:function(e,t){var r=4*t;e.clamp(),e.sigBytes+=r-(e.sigBytes%r||r)},unpad:function(e){for(var t=e.words,r=e.sigBytes-1;!(t[r>>>2]>>>24-r%4*8&255);)r--;e.sigBytes=r+1}},r.pad.ZeroPadding)})),ee((function(e,t){var r;e.exports=((r=te).pad.NoPadding={pad:function(){},unpad:function(){}},r.pad.NoPadding)})),ee((function(e,t){var r,n,i,o;e.exports=(i=(n=r=te).lib.CipherParams,o=n.enc.Hex,n.format.Hex={stringify:function(e){return e.ciphertext.toString(o)},parse:function(e){var t=o.parse(e);return i.create({ciphertext:t})}},r.format.Hex)})),ee((function(e,t){var r;e.exports=(r=te,function(){var e=r,t=e.lib.BlockCipher,n=e.algo,i=[],o=[],s=[],a=[],h=[],l=[],f=[],c=[],u=[],d=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var r=0,n=0;for(t=0;t<256;t++){var p=n^n<<1^n<<2^n<<3^n<<4;p=p>>>8^255&p^99,i[r]=p,o[p]=r;var _=e[r],g=e[_],v=e[g],w=257*e[p]^16843008*p;s[r]=w<<24|w>>>8,a[r]=w<<16|w>>>16,h[r]=w<<8|w>>>24,l[r]=w,w=16843009*v^65537*g^257*_^16843008*r,f[p]=w<<24|w>>>8,c[p]=w<<16|w>>>16,u[p]=w<<8|w>>>24,d[p]=w,r?(r=_^e[e[e[v^_]]],n^=e[e[n]]):r=n=1}}();var p=[0,1,2,4,8,16,32,64,128,27,54],_=n.AES=t.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,r=e.sigBytes/4,n=4*((this._nRounds=r+6)+1),o=this._keySchedule=[],s=0;s6&&s%r==4&&(a=i[a>>>24]<<24|i[a>>>16&255]<<16|i[a>>>8&255]<<8|i[255&a]):(a=i[(a=a<<8|a>>>24)>>>24]<<24|i[a>>>16&255]<<16|i[a>>>8&255]<<8|i[255&a],a^=p[s/r|0]<<24),o[s]=o[s-r]^a}for(var h=this._invKeySchedule=[],l=0;l>>24]]^c[i[a>>>16&255]]^u[i[a>>>8&255]]^d[i[255&a]]}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,h,l,i)},decryptBlock:function(e,t){var r=e[t+1];e[t+1]=e[t+3],e[t+3]=r,this._doCryptBlock(e,t,this._invKeySchedule,f,c,u,d,o),r=e[t+1],e[t+1]=e[t+3],e[t+3]=r},_doCryptBlock:function(e,t,r,n,i,o,s,a){for(var h=this._nRounds,l=e[t]^r[0],f=e[t+1]^r[1],c=e[t+2]^r[2],u=e[t+3]^r[3],d=4,p=1;p>>24]^i[f>>>16&255]^o[c>>>8&255]^s[255&u]^r[d++],g=n[f>>>24]^i[c>>>16&255]^o[u>>>8&255]^s[255&l]^r[d++],v=n[c>>>24]^i[u>>>16&255]^o[l>>>8&255]^s[255&f]^r[d++],w=n[u>>>24]^i[l>>>16&255]^o[f>>>8&255]^s[255&c]^r[d++];l=_,f=g,c=v,u=w}_=(a[l>>>24]<<24|a[f>>>16&255]<<16|a[c>>>8&255]<<8|a[255&u])^r[d++],g=(a[f>>>24]<<24|a[c>>>16&255]<<16|a[u>>>8&255]<<8|a[255&l])^r[d++],v=(a[c>>>24]<<24|a[u>>>16&255]<<16|a[l>>>8&255]<<8|a[255&f])^r[d++],w=(a[u>>>24]<<24|a[l>>>16&255]<<16|a[f>>>8&255]<<8|a[255&c])^r[d++],e[t]=_,e[t+1]=g,e[t+2]=v,e[t+3]=w},keySize:8});e.AES=t._createHelper(_)}(),r.AES)})),ee((function(e,t){var r;e.exports=(r=te,function(){var e=r,t=e.lib,n=t.WordArray,i=t.BlockCipher,o=e.algo,s=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],a=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],h=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],l=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],f=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],c=o.DES=i.extend({_doReset:function(){for(var e=this._key.words,t=[],r=0;r<56;r++){var n=s[r]-1;t[r]=e[n>>>5]>>>31-n%32&1}for(var i=this._subKeys=[],o=0;o<16;o++){var l=i[o]=[],f=h[o];for(r=0;r<24;r++)l[r/6|0]|=t[(a[r]-1+f)%28]<<31-r%6,l[4+(r/6|0)]|=t[28+(a[r+24]-1+f)%28]<<31-r%6;for(l[0]=l[0]<<1|l[0]>>>31,r=1;r<7;r++)l[r]=l[r]>>>4*(r-1)+3;l[7]=l[7]<<5|l[7]>>>27}var c=this._invSubKeys=[];for(r=0;r<16;r++)c[r]=i[15-r]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._subKeys)},decryptBlock:function(e,t){this._doCryptBlock(e,t,this._invSubKeys)},_doCryptBlock:function(e,t,r){this._lBlock=e[t],this._rBlock=e[t+1],u.call(this,4,252645135),u.call(this,16,65535),d.call(this,2,858993459),d.call(this,8,16711935),u.call(this,1,1431655765);for(var n=0;n<16;n++){for(var i=r[n],o=this._lBlock,s=this._rBlock,a=0,h=0;h<8;h++)a|=l[h][((s^i[h])&f[h])>>>0];this._lBlock=s,this._rBlock=o^a}var c=this._lBlock;this._lBlock=this._rBlock,this._rBlock=c,u.call(this,1,1431655765),d.call(this,8,16711935),d.call(this,2,858993459),u.call(this,16,65535),u.call(this,4,252645135),e[t]=this._lBlock,e[t+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function u(e,t){var r=(this._lBlock>>>e^this._rBlock)&t;this._rBlock^=r,this._lBlock^=r<>>e^this._lBlock)&t;this._lBlock^=r,this._rBlock^=r<>>2]>>>24-s%4*8&255;o=(o+n[i]+a)%256;var h=n[i];n[i]=n[o],n[o]=h}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var e=this._S,t=this._i,r=this._j,n=0,i=0;i<4;i++){r=(r+e[t=(t+1)%256])%256;var o=e[t];e[t]=e[r],e[r]=o,n|=e[(e[t]+e[r])%256]<<24-8*i}return this._i=t,this._j=r,n}e.RC4=t._createHelper(i);var s=n.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var e=this.cfg.drop;e>0;e--)o.call(this)}});e.RC4Drop=t._createHelper(s)}(),r.RC4)})),ee((function(e,t){var r;e.exports=(r=te,function(){var e=r,t=e.lib.StreamCipher,n=e.algo,i=[],o=[],s=[],a=n.Rabbit=t.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,r=0;r<4;r++)e[r]=16711935&(e[r]<<8|e[r]>>>24)|4278255360&(e[r]<<24|e[r]>>>8);var n=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],i=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];for(this._b=0,r=0;r<4;r++)h.call(this);for(r=0;r<8;r++)i[r]^=n[r+4&7];if(t){var o=t.words,s=o[0],a=o[1],l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),c=l>>>16|4294901760&f,u=f<<16|65535&l;for(i[0]^=l,i[1]^=c,i[2]^=f,i[3]^=u,i[4]^=l,i[5]^=c,i[6]^=f,i[7]^=u,r=0;r<4;r++)h.call(this)}},_doProcessBlock:function(e,t){var r=this._X;h.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),e[t+n]^=i[n]},blockSize:4,ivSize:2});function h(){for(var e=this._X,t=this._C,r=0;r<8;r++)o[r]=t[r];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,r=0;r<8;r++){var n=e[r]+t[r],i=65535&n,a=n>>>16,h=((i*i>>>17)+i*a>>>15)+a*a,l=((4294901760&n)*n|0)+((65535&n)*n|0);s[r]=h^l}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.Rabbit=t._createHelper(a)}(),r.Rabbit)})),ee((function(e,t){var r;e.exports=(r=te,function(){var e=r,t=e.lib.StreamCipher,n=e.algo,i=[],o=[],s=[],a=n.RabbitLegacy=t.extend({_doReset:function(){var e=this._key.words,t=this.cfg.iv,r=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],n=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var i=0;i<4;i++)h.call(this);for(i=0;i<8;i++)n[i]^=r[i+4&7];if(t){var o=t.words,s=o[0],a=o[1],l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),c=l>>>16|4294901760&f,u=f<<16|65535&l;for(n[0]^=l,n[1]^=c,n[2]^=f,n[3]^=u,n[4]^=l,n[5]^=c,n[6]^=f,n[7]^=u,i=0;i<4;i++)h.call(this)}},_doProcessBlock:function(e,t){var r=this._X;h.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),e[t+n]^=i[n]},blockSize:4,ivSize:2});function h(){for(var e=this._X,t=this._C,r=0;r<8;r++)o[r]=t[r];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,r=0;r<8;r++){var n=e[r]+t[r],i=65535&n,a=n>>>16,h=((i*i>>>17)+i*a>>>15)+a*a,l=((4294901760&n)*n|0)+((65535&n)*n|0);s[r]=h^l}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.RabbitLegacy=t._createHelper(a)}(),r.RabbitLegacy)})),ee((function(e,t){e.exports=te})));function ne(){throw new Error("setTimeout has not been defined")}function ie(){throw new Error("clearTimeout has not been defined")}var oe=ne,se=ie;function ae(e){if(oe===setTimeout)return setTimeout(e,0);if((oe===ne||!oe)&&setTimeout)return oe=setTimeout,setTimeout(e,0);try{return oe(e,0)}catch(t){try{return oe.call(null,e,0)}catch(t){return oe.call(this,e,0)}}}"function"==typeof e.setTimeout&&(oe=setTimeout),"function"==typeof e.clearTimeout&&(se=clearTimeout);var he,le=[],fe=!1,ce=-1;function ue(){fe&&he&&(fe=!1,he.length?le=he.concat(le):ce=-1,le.length&&de())}function de(){if(!fe){var e=ae(ue);fe=!0;for(var t=le.length;t;){for(he=le,le=[];++ce1)for(var r=1;r0&&s.length>i){s.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=e,h.type=t,h.count=s.length,a=h,"function"==typeof console.warn?console.warn(a):console.log(a)}}else s=o[t]=r,++e._eventsCount;return e}function Re(e,t,r){var n=!1;function i(){e.removeListener(t,i),n||(n=!0,r.apply(e,arguments))}return i.listener=r,i}function Ae(e){var t=this._events;if(t){var r=t[e];if("function"==typeof r)return 1;if(r)return r.length}return 0}function Be(e,t){for(var r=new Array(t);t--;)r[t]=e[t];return r}ge.now||ge.mozNow||ge.msNow||ge.oNow||ge.webkitNow,ve.prototype=Object.create(null),we.EventEmitter=we,we.usingDomains=!1,we.prototype.domain=void 0,we.prototype._events=void 0,we.prototype._maxListeners=void 0,we.defaultMaxListeners=10,we.init=function(){this.domain=null,we.usingDomains&&(void 0).active&&(void 0).Domain,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new ve,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},we.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},we.prototype.getMaxListeners=function(){return be(this)},we.prototype.emit=function(e){var t,r,n,i,o,s,a,h="error"===e;if(s=this._events)h=h&&null==s.error;else if(!h)return!1;if(a=this.domain,h){if(t=arguments[1],!a){if(t instanceof Error)throw t;var l=new Error('Uncaught, unspecified "error" event. ('+t+")");throw l.context=t,l}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=a,t.domainThrown=!1,a.emit("error",t),!1}if(!(r=s[e]))return!1;var f="function"==typeof r;switch(n=arguments.length){case 1:ye(r,f,this);break;case 2:me(r,f,this,arguments[1]);break;case 3:ke(r,f,this,arguments[1],arguments[2]);break;case 4:Ee(r,f,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(n-1),o=1;o0;)if(r[o]===t||r[o].listener&&r[o].listener===t){s=r[o].listener,i=o;break}if(i<0)return this;if(1===r.length){if(r[0]=void 0,0==--this._eventsCount)return this._events=new ve,this;delete n[e]}else!function(e,t){for(var r=t,n=r+1,i=e.length;n0?Reflect.ownKeys(this._events):[]};var ze="function"==typeof Object.create?function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e},Le=/%[sdj%]/g;function Te(e){if(!je(e)){for(var t=[],r=0;r=i)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}})),s=n[r];r=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),Ne(t)?r.showHidden=t:t&&function(e,t){if(!t||!Ke(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]]}(r,t),We(r.showHidden)&&(r.showHidden=!1),We(r.depth)&&(r.depth=2),We(r.colors)&&(r.colors=!1),We(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=Pe),Ue(r,e,r.depth)}function Pe(e,t){var r=Ie.styles[t];return r?"["+Ie.colors[r][0]+"m"+e+"["+Ie.colors[r][1]+"m":e}function Oe(e,t){return e}function Ue(e,t,r){if(e.customInspect&&t&&Ve(t.inspect)&&t.inspect!==Ie&&(!t.constructor||t.constructor.prototype!==t)){var n=t.inspect(r,e);return je(n)||(n=Ue(e,n,r)),n}var i=function(e,t){if(We(t))return e.stylize("undefined","undefined");if(je(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}return"number"==typeof t?e.stylize(""+t,"number"):Ne(t)?e.stylize(""+t,"boolean"):Ze(t)?e.stylize("null","null"):void 0}(e,t);if(i)return i;var o=Object.keys(t),s=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(t)),qe(t)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return He(t);if(0===o.length){if(Ve(t)){var a=t.name?": "+t.name:"";return e.stylize("[Function"+a+"]","special")}if(Ye(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(Xe(t))return e.stylize(Date.prototype.toString.call(t),"date");if(qe(t))return He(t)}var h,l,f="",c=!1,u=["{","}"];return h=t,Array.isArray(h)&&(c=!0,u=["[","]"]),Ve(t)&&(f=" [Function"+(t.name?": "+t.name:"")+"]"),Ye(t)&&(f=" "+RegExp.prototype.toString.call(t)),Xe(t)&&(f=" "+Date.prototype.toUTCString.call(t)),qe(t)&&(f=" "+He(t)),0!==o.length||c&&0!=t.length?r<0?Ye(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special"):(e.seen.push(t),l=c?function(e,t,r,n,i){for(var o=[],s=0,a=t.length;s60?r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1]:r[0]+t+" "+e.join(", ")+" "+r[1]}(l,f,u)):u[0]+f+u[1]}function He(e){return"["+Error.prototype.toString.call(e)+"]"}function Fe(e,t,r,n,i,o){var s,a,h;if((h=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?a=h.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):h.set&&(a=e.stylize("[Setter]","special")),Je(n,i)||(s="["+i+"]"),a||(e.seen.indexOf(h.value)<0?(a=Ze(r)?Ue(e,h.value,null):Ue(e,h.value,r-1)).indexOf("\n")>-1&&(a=o?a.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+a.split("\n").map((function(e){return" "+e})).join("\n")):a=e.stylize("[Circular]","special")),We(s)){if(o&&i.match(/^\d+$/))return a;(s=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+a}function Ne(e){return"boolean"==typeof e}function Ze(e){return null===e}function je(e){return"string"==typeof e}function We(e){return void 0===e}function Ye(e){return Ke(e)&&"[object RegExp]"===Ge(e)}function Ke(e){return"object"==typeof e&&null!==e}function Xe(e){return Ke(e)&&"[object Date]"===Ge(e)}function qe(e){return Ke(e)&&("[object Error]"===Ge(e)||e instanceof Error)}function Ve(e){return"function"==typeof e}function Ge(e){return Object.prototype.toString.call(e)}function Je(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function $e(){this.head=null,this.tail=null,this.length=0}Ie.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},Ie.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},$e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},$e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},$e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},$e.prototype.clear=function(){this.head=this.tail=null,this.length=0},$e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},$e.prototype.concat=function(e){if(0===this.length)return _.alloc(0);if(1===this.length)return this.head.data;for(var t=_.allocUnsafe(e>>>0),r=this.head,n=0;r;)r.data.copy(t,n),n+=r.data.length,r=r.next;return t};var Qe=_.isEncoding||function(e){switch(e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function et(e){switch(this.encoding=(e||"utf8").toLowerCase().replace(/[-_]/,""),function(e){if(e&&!Qe(e))throw new Error("Unknown encoding: "+e)}(e),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=rt;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=nt;break;default:return void(this.write=tt)}this.charBuffer=new _(6),this.charReceived=0,this.charLength=0}function tt(e){return e.toString(this.encoding)}function rt(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function nt(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}et.prototype.write=function(e){for(var t="";this.charLength;){var r=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived=55296&&n<=56319)){if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.charLength+=this.surrogateSize,t=""}this.detectIncompleteChar(e);var n,i=e.length;if(this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,i),i-=this.charReceived),i=(t+=e.toString(this.encoding,0,i)).length-1,(n=t.charCodeAt(i))>=55296&&n<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),e.copy(this.charBuffer,0,0,o),t.substring(0,i)}return t},et.prototype.detectIncompleteChar=function(e){for(var t=e.length>=3?3:e.length;t>0;t--){var r=e[e.length-t];if(1==t&&r>>5==6){this.charLength=2;break}if(t<=2&&r>>4==14){this.charLength=3;break}if(t<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=t},et.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),this.charReceived){var r=this.charReceived,n=this.charBuffer,i=this.encoding;t+=n.slice(0,r).toString(i)}return t},st.ReadableState=ot;var it=function(e){return We(Ce)&&(Ce=""),e=e.toUpperCase(),De[e]||(new RegExp("\\b"+e+"\\b","i").test(Ce)?De[e]=function(){var t=Te.apply(null,arguments);console.error("%s %d: %s",e,0,t)}:De[e]=function(){}),De[e]}("stream");function ot(e,t){e=e||{},this.objectMode=!!e.objectMode,t instanceof Dt&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var r=e.highWaterMark,n=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:n,this.highWaterMark=~~this.highWaterMark,this.buffer=new $e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(this.decoder=new et(e.encoding),this.encoding=e.encoding)}function st(e){if(!(this instanceof st))return new st(e);this._readableState=new ot(e,this),this.readable=!0,e&&"function"==typeof e.read&&(this._read=e.read),we.call(this)}function at(e,t,r,n,i){var o=function(e,t){var r=null;return $(t)||"string"==typeof t||null==t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r}(t,r);if(o)e.emit("error",o);else if(null===r)t.reading=!1,function(e,t){if(!t.ended){if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,ft(e)}}(e,t);else if(t.objectMode||r&&r.length>0)if(t.ended&&!i){var s=new Error("stream.push() after EOF");e.emit("error",s)}else if(t.endEmitted&&i){var a=new Error("stream.unshift() after end event");e.emit("error",a)}else{var h;!t.decoder||i||n||(r=t.decoder.write(r),h=!t.objectMode&&0===r.length),i||(t.reading=!1),h||(t.flowing&&0===t.length&&!t.sync?(e.emit("data",r),e.read(0)):(t.length+=t.objectMode?1:r.length,i?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&ft(e))),function(e,t){t.readingMore||(t.readingMore=!0,pe(ut,e,t))}(e,t)}else i||(t.reading=!1);return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=ht?e=ht:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function ft(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(it("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?pe(ct,e):ct(e))}function ct(e){it("emit readable"),e.emit("readable"),_t(e)}function ut(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;return eo.length?o.length:e;if(s===o.length?i+=o:i+=o.slice(0,e),0==(e-=s)){s===o.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=o.slice(s));break}++n}return t.length-=n,i}(e,t):function(e,t){var r=_.allocUnsafe(e),n=t.head,i=1;for(n.data.copy(r),e-=n.data.length;n=n.next;){var o=n.data,s=e>o.length?o.length:e;if(o.copy(r,r.length-e,0,s),0==(e-=s)){s===o.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=o.slice(s));break}++i}return t.length-=i,r}(e,t),n}(e,t.buffer,t.decoder),r);var r}function vt(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,pe(wt,t,e))}function wt(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function bt(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return it("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?vt(this):ft(this),null;if(0===(e=lt(e,t))&&t.ended)return 0===t.length&&vt(this),null;var n,i=t.needReadable;return it("need readable",i),(0===t.length||t.length-e0?gt(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&vt(this)),null!==n&&this.emit("data",n),n},st.prototype._read=function(e){this.emit("error",new Error("not implemented"))},st.prototype.pipe=function(e,t){var r=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=e;break;case 1:n.pipes=[n.pipes,e];break;default:n.pipes.push(e)}n.pipesCount+=1,it("pipe count=%d opts=%j",n.pipesCount,t);var i=t&&!1===t.end?l:s;function o(e){it("onunpipe"),e===r&&l()}function s(){it("onend"),e.end()}n.endEmitted?pe(i):r.once("end",i),e.on("unpipe",o);var a=function(e){return function(){var t=e._readableState;it("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&e.listeners("data").length&&(t.flowing=!0,_t(e))}}(r);e.on("drain",a);var h=!1;function l(){it("cleanup"),e.removeListener("close",d),e.removeListener("finish",p),e.removeListener("drain",a),e.removeListener("error",u),e.removeListener("unpipe",o),r.removeListener("end",s),r.removeListener("end",l),r.removeListener("data",c),h=!0,!n.awaitDrain||e._writableState&&!e._writableState.needDrain||a()}var f=!1;function c(t){it("ondata"),f=!1,!1!==e.write(t)||f||((1===n.pipesCount&&n.pipes===e||n.pipesCount>1&&-1!==bt(n.pipes,e))&&!h&&(it("false write response, pause",r._readableState.awaitDrain),r._readableState.awaitDrain++,f=!0),r.pause())}function u(t){it("onerror",t),_(),e.removeListener("error",u),0===("error",e.listeners("error").length)&&e.emit("error",t)}function d(){e.removeListener("finish",p),_()}function p(){it("onfinish"),e.removeListener("close",d),_()}function _(){it("unpipe"),r.unpipe(e)}return r.on("data",c),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",u),e.once("close",d),e.once("finish",p),e.emit("pipe",r),n.flowing||(it("pipe resume"),r.resume()),e},st.prototype.unpipe=function(e){var t=this._readableState;if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this)),this;if(!e){var r=t.pipes,n=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Et.prototype._write=function(e,t,r){r(new Error("not implemented"))},Et.prototype._writev=null,Et.prototype.end=function(e,t,r){var n=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(e,t,r){t.ending=!0,zt(e,t),r&&(t.finished?pe(r):e.once("finish",r)),t.ended=!0,e.writable=!1}(this,n,r)},ze(Dt,st);for(var Tt=Object.keys(Et.prototype),Mt=0;Mt=0;)e[t]=0}var Vt=256,Gt=286,Jt=30,$t=15,Qt=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],er=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],tr=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],rr=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],nr=new Array(576);qt(nr);var ir=new Array(60);qt(ir);var or=new Array(512);qt(or);var sr=new Array(256);qt(sr);var ar=new Array(29);qt(ar);var hr,lr,fr,cr=new Array(Jt);function ur(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function dr(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function pr(e){return e<256?or[e]:or[256+(e>>>7)]}function _r(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function gr(e,t,r){e.bi_valid>16-r?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<>>=1,r<<=1}while(--t>0);return r>>>1}function br(e,t,r){var n,i,o=new Array(16),s=0;for(n=1;n<=$t;n++)o[n]=s=s+r[n-1]<<1;for(i=0;i<=t;i++){var a=e[2*i+1];0!==a&&(e[2*i]=wr(o[a]++,a))}}function yr(e){var t;for(t=0;t8?_r(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function kr(e,t,r,n){var i=2*t,o=2*r;return e[i]>1;r>=1;r--)Er(e,o,r);i=h;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],Er(e,o,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,o[2*i]=o[2*r]+o[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,o[2*r+1]=o[2*n+1]=i,e.heap[1]=i++,Er(e,o,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,o,s,a,h=t.dyn_tree,l=t.max_code,f=t.stat_desc.static_tree,c=t.stat_desc.has_stree,u=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,_=0;for(o=0;o<=$t;o++)e.bl_count[o]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<573;r++)(o=h[2*h[2*(n=e.heap[r])+1]+1]+1)>p&&(o=p,_++),h[2*n+1]=o,n>l||(e.bl_count[o]++,s=0,n>=d&&(s=u[n-d]),a=h[2*n],e.opt_len+=a*(o+s),c&&(e.static_len+=a*(f[2*n+1]+s)));if(0!==_){do{for(o=p-1;0===e.bl_count[o];)o--;e.bl_count[o]--,e.bl_count[o+1]+=2,e.bl_count[p]--,_-=2}while(_>0);for(o=p;0!==o;o--)for(n=e.bl_count[o];0!==n;)(i=e.heap[--r])>l||(h[2*i+1]!==o&&(e.opt_len+=(o-h[2*i+1])*h[2*i],h[2*i+1]=o),n--)}}(e,t),br(o,l,e.bl_count)}function Rr(e,t,r){var n,i,o=-1,s=t[1],a=0,h=7,l=4;for(0===s&&(h=138,l=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=s,s=t[2*(n+1)+1],++a>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(sr[r]+Vt+1)]++,e.dyn_dtree[2*pr(t)]++),e.last_lit===e.lit_bufsize-1}function Tr(e,t,r,n){for(var i=65535&e|0,o=e>>>16&65535|0,s=0;0!==r;){r-=s=r>2e3?2e3:r;do{o=o+(i=i+t[n++]|0)|0}while(--s);i%=65521,o%=65521}return i|o<<16|0}var Mr=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();function Cr(e,t,r,n){var i=Mr,o=n+r;e^=-1;for(var s=n;s>>8^i[255&(e^t[s])];return-1^e}var Dr,Ir=-2,Pr=258,Or=262,Ur=103,Hr=113,Fr=666;function Nr(e,t){return e.msg=Zt[t],t}function Zr(e){return(e<<1)-(e>4?9:0)}function jr(e){for(var t=e.length;--t>=0;)e[t]=0}function Wr(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(Wt(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function Yr(e,t){(function(e,t,r,n){var i,o,s=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t=3&&0===e.bl_tree[2*rr[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(o=e.static_len+3+7>>>3)<=i&&(i=o)):i=o=r+5,r+4<=i&&-1!==t?zr(e,t,r,n):4===e.strategy||o===i?(gr(e,2+(n?1:0),3),xr(e,nr,ir)):(gr(e,4+(n?1:0),3),function(e,t,r,n){var i;for(gr(e,t-257,5),gr(e,r-1,5),gr(e,n-4,4),i=0;i=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,Wr(e.strm)}function Kr(e,t){e.pending_buf[e.pending++]=t}function Xr(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function qr(e,t){var r,n,i=e.max_chain_length,o=e.strstart,s=e.prev_length,a=e.nice_match,h=e.strstart>e.w_size-Or?e.strstart-(e.w_size-Or):0,l=e.window,f=e.w_mask,c=e.prev,u=e.strstart+Pr,d=l[o+s-1],p=l[o+s];e.prev_length>=e.good_match&&(i>>=2),a>e.lookahead&&(a=e.lookahead);do{if(l[(r=t)+s]===p&&l[r+s-1]===d&&l[r]===l[o]&&l[++r]===l[o+1]){o+=2,r++;do{}while(l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&os){if(e.match_start=t,s=n,n>=a)break;d=l[o+s-1],p=l[o+s]}}}while((t=c[t&f])>h&&0!=--i);return s<=e.lookahead?s:e.lookahead}function Vr(e){var t,r,n,i,o,s,a,h,l,f,c=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=c+(c-Or)){Wt(e.window,e.window,c,c,0),e.match_start-=c,e.strstart-=c,e.block_start-=c,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=c?n-c:0}while(--r);t=r=c;do{n=e.prev[--t],e.prev[t]=n>=c?n-c:0}while(--r);i+=c}if(0===e.strm.avail_in)break;if(s=e.strm,a=e.window,h=e.strstart+e.lookahead,l=i,f=void 0,(f=s.avail_in)>l&&(f=l),r=0===f?0:(s.avail_in-=f,Wt(a,s.input,s.next_in,f,h),1===s.state.wrap?s.adler=Tr(s.adler,a,f,h):2===s.state.wrap&&(s.adler=Cr(s.adler,a,f,h)),s.next_in+=f,s.total_in+=f,f),e.lookahead+=r,e.lookahead+e.insert>=3)for(o=e.strstart-e.insert,e.ins_h=e.window[o],e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<=3)if(n=Lr(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-3,n=Lr(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<>=7;n5||t<0)return e?Nr(e,Ir):Ir;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||n.status===Fr&&4!==t)return Nr(e,0===e.avail_out?-5:Ir);if(n.strm=e,r=n.last_flush,n.last_flush=t,42===n.status)if(2===n.wrap)e.adler=0,Kr(n,31),Kr(n,139),Kr(n,8),n.gzhead?(Kr(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),Kr(n,255&n.gzhead.time),Kr(n,n.gzhead.time>>8&255),Kr(n,n.gzhead.time>>16&255),Kr(n,n.gzhead.time>>24&255),Kr(n,9===n.level?2:n.strategy>=2||n.level<2?4:0),Kr(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(Kr(n,255&n.gzhead.extra.length),Kr(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=Cr(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(Kr(n,0),Kr(n,0),Kr(n,0),Kr(n,0),Kr(n,0),Kr(n,9===n.level?2:n.strategy>=2||n.level<2?4:0),Kr(n,3),n.status=Hr);else{var s=8+(n.w_bits-8<<4)<<8;s|=(n.strategy>=2||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(s|=32),s+=31-s%31,n.status=Hr,Xr(n,s),0!==n.strstart&&(Xr(n,e.adler>>>16),Xr(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=Cr(e.adler,n.pending_buf,n.pending-i,i)),Wr(e),i=n.pending,n.pending!==n.pending_buf_size));)Kr(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=Cr(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=Cr(e.adler,n.pending_buf,n.pending-i,i)),Wr(e),i=n.pending,n.pending===n.pending_buf_size)){o=1;break}o=n.gzindexi&&(e.adler=Cr(e.adler,n.pending_buf,n.pending-i,i)),0===o&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=Cr(e.adler,n.pending_buf,n.pending-i,i)),Wr(e),i=n.pending,n.pending===n.pending_buf_size)){o=1;break}o=n.gzindexi&&(e.adler=Cr(e.adler,n.pending_buf,n.pending-i,i)),0===o&&(n.status=Ur)}else n.status=Ur;if(n.status===Ur&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&Wr(e),n.pending+2<=n.pending_buf_size&&(Kr(n,255&e.adler),Kr(n,e.adler>>8&255),e.adler=0,n.status=Hr)):n.status=Hr),0!==n.pending){if(Wr(e),0===e.avail_out)return n.last_flush=-1,0}else if(0===e.avail_in&&Zr(t)<=Zr(r)&&4!==t)return Nr(e,-5);if(n.status===Fr&&0!==e.avail_in)return Nr(e,-5);if(0!==e.avail_in||0!==n.lookahead||0!==t&&n.status!==Fr){var a=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(Vr(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,r=Lr(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(Yr(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(Yr(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Yr(e,!1),0===e.strm.avail_out)?1:2}(n,t):3===n.strategy?function(e,t){for(var r,n,i,o,s=e.window;;){if(e.lookahead<=Pr){if(Vr(e),e.lookahead<=Pr&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(n=s[i=e.strstart-1])===s[++i]&&n===s[++i]&&n===s[++i]){o=e.strstart+Pr;do{}while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=Lr(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=Lr(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(Yr(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(Yr(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Yr(e,!1),0===e.strm.avail_out)?1:2}(n,t):Dr[n.level].func(n,t);if(3!==a&&4!==a||(n.status=Fr),1===a||3===a)return 0===e.avail_out&&(n.last_flush=-1),0;if(2===a&&(1===t?function(e){gr(e,2,3),vr(e,256,nr),function(e){16===e.bi_valid?(_r(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}(n):5!==t&&(zr(n,0,0,!1),3===t&&(jr(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),Wr(e),0===e.avail_out))return n.last_flush=-1,0}return 4!==t?0:n.wrap<=0?1:(2===n.wrap?(Kr(n,255&e.adler),Kr(n,e.adler>>8&255),Kr(n,e.adler>>16&255),Kr(n,e.adler>>24&255),Kr(n,255&e.total_in),Kr(n,e.total_in>>8&255),Kr(n,e.total_in>>16&255),Kr(n,e.total_in>>24&255)):(Xr(n,e.adler>>>16),Xr(n,65535&e.adler)),Wr(e),n.wrap>0&&(n.wrap=-n.wrap),0!==n.pending?0:1)}Dr=[new $r(0,0,0,0,(function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(Vr(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,Yr(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-Or&&(Yr(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(Yr(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(Yr(e,!1),e.strm.avail_out),1)})),new $r(4,4,8,4,Gr),new $r(4,5,16,8,Gr),new $r(4,6,32,32,Gr),new $r(4,4,16,16,Jr),new $r(8,16,32,32,Jr),new $r(8,16,128,128,Jr),new $r(8,32,128,256,Jr),new $r(32,128,258,1024,Jr),new $r(32,258,258,4096,Jr)];function rn(e,t){var r,n,i,o,s,a,h,l,f,c,u,d,p,_,g,v,w,b,y,m,k,E,x,S,R;r=e.state,n=e.next_in,S=e.input,i=n+(e.avail_in-5),o=e.next_out,R=e.output,s=o-(t-e.avail_out),a=o+(e.avail_out-257),h=r.dmax,l=r.wsize,f=r.whave,c=r.wnext,u=r.window,d=r.hold,p=r.bits,_=r.lencode,g=r.distcode,v=(1<>>=y=b>>>24,p-=y,0==(y=b>>>16&255))R[o++]=65535&b;else{if(!(16&y)){if(0==(64&y)){b=_[(65535&b)+(d&(1<>>=y,p-=y),p<15&&(d+=S[n++]<>>=y=b>>>24,p-=y,!(16&(y=b>>>16&255))){if(0==(64&y)){b=g[(65535&b)+(d&(1<h){e.msg="invalid distance too far back",r.mode=30;break e}if(d>>>=y,p-=y,k>(y=o-s)){if((y=k-y)>f&&r.sane){e.msg="invalid distance too far back",r.mode=30;break e}if(E=0,x=u,0===c){if(E+=l-y,y2;)R[o++]=x[E++],R[o++]=x[E++],R[o++]=x[E++],m-=3;m&&(R[o++]=x[E++],m>1&&(R[o++]=x[E++]))}else{E=o-k;do{R[o++]=R[E++],R[o++]=R[E++],R[o++]=R[E++],m-=3}while(m>2);m&&(R[o++]=R[E++],m>1&&(R[o++]=R[E++]))}break}}break}}while(n>3,d&=(1<<(p-=m<<3))-1,e.next_in=n,e.next_out=o,e.avail_in=n=1&&0===L[m];m--);if(k>m&&(k=m),0===m)return i[o++]=20971520,i[o++]=20971520,a.bits=1,0;for(y=1;y0&&(0===e||1!==m))return-1;for(T[1]=0,w=1;w852||2===e&&R>592)return 1;for(;;){p=w-x,s[b]d?(_=M[C+s[b]],g=B[z+s[b]]):(_=96,g=0),h=1<>x)+(l-=h)]=p<<24|_<<16|g|0}while(0!==l);for(h=1<>=1;if(0!==h?(A&=h-1,A+=h):A=0,b++,0==--L[w]){if(w===m)break;w=t[r+s[b]]}if(w>k&&(A&c)!==f){for(0===x&&(x=k),u+=y,S=1<<(E=w-x);E+x852||2===e&&R>592)return 1;i[f=A&c]=k<<24|E<<16|u-o|0}}return 0!==A&&(i[u+A]=w-x<<24|64<<16|0),a.bits=k,0}var fn=-2,cn=12,un=30;function dn(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function pn(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Kt(320),this.work=new Kt(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function _n(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,function(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Xt(852),t.distcode=t.distdyn=new Xt(592),t.sane=1,t.back=-1,0):fn}(e)):fn}var gn,vn,wn=!0;function bn(e){if(wn){var t;for(gn=new Xt(512),vn=new Xt(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(ln(1,e.lens,0,288,gn,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;ln(2,e.lens,0,32,vn,0,e.work,{bits:5}),wn=!1}e.lencode=gn,e.lenbits=9,e.distcode=vn,e.distbits=5}var yn;function mn(e){if(e<1||e>7)throw new TypeError("Bad argument");this.mode=e,this.init_done=!1,this.write_in_progress=!1,this.pending_close=!1,this.windowBits=0,this.level=0,this.memLevel=0,this.strategy=0,this.dictionary=null}function kn(e,t){for(var r=0;r15&&(s=2,n-=16),i<1||i>9||n<8||n>15||t<0||t>9||o<0||o>4)return Nr(e,Ir);8===n&&(n=9);var a=new Qr;return e.state=a,a.strm=e,a.wrap=s,a.gzhead=null,a.w_bits=n,a.w_size=1<>4),t<48&&(t&=15)),t&&(t<8||t>15)?fn:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,_n(e))):fn}(e,t))&&(e.state=null),r):fn}(this.strm,this.windowBits);break;default:throw new Error("Unknown mode "+this.mode)}0===o?(this.write_in_progress=!1,this.init_done=!0):this._error(o)},mn.prototype.params=function(){throw new Error("deflateParams Not supported")},mn.prototype._writeCheck=function(){if(!this.init_done)throw new Error("write before init");if(0===this.mode)throw new Error("already finalized");if(this.write_in_progress)throw new Error("write already in progress");if(this.pending_close)throw new Error("close is pending")},mn.prototype.write=function(e,t,r,n,i,o,s){this._writeCheck(),this.write_in_progress=!0;var a=this;return pe((function(){a.write_in_progress=!1;var h=a._write(e,t,r,n,i,o,s);a.callback(h[0],h[1]),a.pending_close&&a.close()})),this},mn.prototype.writeSync=function(e,t,r,n,i,o,s){return this._writeCheck(),this._write(e,t,r,n,i,o,s)},mn.prototype._write=function(e,t,r,n,i,o,s){if(this.write_in_progress=!0,0!==e&&1!==e&&2!==e&&3!==e&&4!==e&&5!==e)throw new Error("Invalid flush value");null==t&&(t=new _(0),n=0,r=0),i._set?i.set=i._set:i.set=kn;var a,h=this.strm;switch(h.avail_in=n,h.input=t,h.next_in=r,h.avail_out=s,h.output=i,h.next_out=o,this.mode){case 1:case 3:case 5:a=tn(h,e);break;case 7:case 2:case 4:case 6:a=function(e,t){var r,n,i,o,s,a,h,l,f,c,u,d,p,_,g,v,w,b,y,m,k,E,x,S,R=0,A=new Yt(4),B=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return fn;(r=e.state).mode===cn&&(r.mode=13),s=e.next_out,i=e.output,h=e.avail_out,o=e.next_in,n=e.input,a=e.avail_in,l=r.hold,f=r.bits,c=a,u=h,E=0;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;f<16;){if(0===a)break e;a--,l+=n[o++]<>>8&255,r.check=Cr(r.check,A,2,0),l=0,f=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",r.mode=un;break}if(8!=(15&l)){e.msg="unknown compression method",r.mode=un;break}if(f-=4,k=8+(15&(l>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=un;break}r.dmax=1<>8&1),512&r.flags&&(A[0]=255&l,A[1]=l>>>8&255,r.check=Cr(r.check,A,2,0)),l=0,f=0,r.mode=3;case 3:for(;f<32;){if(0===a)break e;a--,l+=n[o++]<>>8&255,A[2]=l>>>16&255,A[3]=l>>>24&255,r.check=Cr(r.check,A,4,0)),l=0,f=0,r.mode=4;case 4:for(;f<16;){if(0===a)break e;a--,l+=n[o++]<>8),512&r.flags&&(A[0]=255&l,A[1]=l>>>8&255,r.check=Cr(r.check,A,2,0)),l=0,f=0,r.mode=5;case 5:if(1024&r.flags){for(;f<16;){if(0===a)break e;a--,l+=n[o++]<>>8&255,r.check=Cr(r.check,A,2,0)),l=0,f=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&((d=r.length)>a&&(d=a),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),Wt(r.head.extra,n,o,d,k)),512&r.flags&&(r.check=Cr(r.check,n,d,o)),a-=d,o+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===a)break e;d=0;do{k=n[o+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k))}while(k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=cn;break;case 10:for(;f<32;){if(0===a)break e;a--,l+=n[o++]<>>=7&f,f-=7&f,r.mode=27;break}for(;f<3;){if(0===a)break e;a--,l+=n[o++]<>>=1)){case 0:r.mode=14;break;case 1:if(bn(r),r.mode=20,6===t){l>>>=2,f-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=un}l>>>=2,f-=2;break;case 14:for(l>>>=7&f,f-=7&f;f<32;){if(0===a)break e;a--,l+=n[o++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=un;break}if(r.length=65535&l,l=0,f=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(d>a&&(d=a),d>h&&(d=h),0===d)break e;Wt(i,n,o,d,s),a-=d,o+=d,h-=d,s+=d,r.length-=d;break}r.mode=cn;break;case 17:for(;f<14;){if(0===a)break e;a--,l+=n[o++]<>>=5,f-=5,r.ndist=1+(31&l),l>>>=5,f-=5,r.ncode=4+(15&l),l>>>=4,f-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=un;break}r.have=0,r.mode=18;case 18:for(;r.have>>=3,f-=3}for(;r.have<19;)r.lens[B[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,x={bits:r.lenbits},E=ln(0,r.lens,0,19,r.lencode,0,r.work,x),r.lenbits=x.bits,E){e.msg="invalid code lengths set",r.mode=un;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,w=65535&R,!((g=R>>>24)<=f);){if(0===a)break e;a--,l+=n[o++]<>>=g,f-=g,r.lens[r.have++]=w;else{if(16===w){for(S=g+2;f>>=g,f-=g,0===r.have){e.msg="invalid bit length repeat",r.mode=un;break}k=r.lens[r.have-1],d=3+(3&l),l>>>=2,f-=2}else if(17===w){for(S=g+3;f>>=g)),l>>>=3,f-=3}else{for(S=g+7;f>>=g)),l>>>=7,f-=7}if(r.have+d>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=un;break}for(;d--;)r.lens[r.have++]=k}}if(r.mode===un)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=un;break}if(r.lenbits=9,x={bits:r.lenbits},E=ln(1,r.lens,0,r.nlen,r.lencode,0,r.work,x),r.lenbits=x.bits,E){e.msg="invalid literal/lengths set",r.mode=un;break}if(r.distbits=6,r.distcode=r.distdyn,x={bits:r.distbits},E=ln(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,x),r.distbits=x.bits,E){e.msg="invalid distances set",r.mode=un;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(a>=6&&h>=258){e.next_out=s,e.avail_out=h,e.next_in=o,e.avail_in=a,r.hold=l,r.bits=f,rn(e,u),s=e.next_out,i=e.output,h=e.avail_out,o=e.next_in,n=e.input,a=e.avail_in,l=r.hold,f=r.bits,r.mode===cn&&(r.back=-1);break}for(r.back=0;v=(R=r.lencode[l&(1<>>16&255,w=65535&R,!((g=R>>>24)<=f);){if(0===a)break e;a--,l+=n[o++]<>b)])>>>16&255,w=65535&R,!(b+(g=R>>>24)<=f);){if(0===a)break e;a--,l+=n[o++]<>>=b,f-=b,r.back+=b}if(l>>>=g,f-=g,r.back+=g,r.length=w,0===v){r.mode=26;break}if(32&v){r.back=-1,r.mode=cn;break}if(64&v){e.msg="invalid literal/length code",r.mode=un;break}r.extra=15&v,r.mode=22;case 22:if(r.extra){for(S=r.extra;f>>=r.extra,f-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;v=(R=r.distcode[l&(1<>>16&255,w=65535&R,!((g=R>>>24)<=f);){if(0===a)break e;a--,l+=n[o++]<>b)])>>>16&255,w=65535&R,!(b+(g=R>>>24)<=f);){if(0===a)break e;a--,l+=n[o++]<>>=b,f-=b,r.back+=b}if(l>>>=g,f-=g,r.back+=g,64&v){e.msg="invalid distance code",r.mode=un;break}r.offset=w,r.extra=15&v,r.mode=24;case 24:if(r.extra){for(S=r.extra;f>>=r.extra,f-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=un;break}r.mode=25;case 25:if(0===h)break e;if(d=u-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=un;break}d>r.wnext?(d-=r.wnext,p=r.wsize-d):p=r.wnext-d,d>r.length&&(d=r.length),_=r.window}else _=i,p=s-r.offset,d=r.length;d>h&&(d=h),h-=d,r.length-=d;do{i[s++]=_[p++]}while(--d);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[s++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;f<32;){if(0===a)break e;a--,l|=n[o++]<=o.wsize?(Wt(o.window,t,r-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((i=o.wsize-o.wnext)>n&&(i=n),Wt(o.window,t,r-n,i,o.wnext),(n-=i)?(Wt(o.window,t,r-n,n,0),o.wnext=n,o.whave=o.wsize):(o.wnext+=i,o.wnext===o.wsize&&(o.wnext=0),o.whavexn.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+e.chunkSize);if(e.windowBits&&(e.windowBitsxn.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+e.windowBits);if(e.level&&(e.levelxn.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+e.level);if(e.memLevel&&(e.memLevelxn.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+e.memLevel);if(e.strategy&&e.strategy!=xn.Z_FILTERED&&e.strategy!=xn.Z_HUFFMAN_ONLY&&e.strategy!=xn.Z_RLE&&e.strategy!=xn.Z_FIXED&&e.strategy!=xn.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+e.strategy);if(e.dictionary&&!$(e.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._binding=new xn.Zlib(t);var r=this;this._hadError=!1,this._binding.onerror=function(e,t){r._binding=null,r._hadError=!0;var n=new Error(e);n.errno=t,n.code=xn.codes[t],r.emit("error",n)};var n=xn.Z_DEFAULT_COMPRESSION;"number"==typeof e.level&&(n=e.level);var i=xn.Z_DEFAULT_STRATEGY;"number"==typeof e.strategy&&(i=e.strategy),this._binding.init(e.windowBits||xn.Z_DEFAULT_WINDOWBITS,n,e.memLevel||xn.Z_DEFAULT_MEMLEVEL,i,e.dictionary),this._buffer=new _(this._chunkSize),this._offset=0,this._closed=!1,this._level=n,this._strategy=i,this.once("end",this.close)}Object.keys(Sn).forEach((function(e){Sn[Sn[e]]=e})),ze(Dn,Ut),Dn.prototype.params=function(e,t,r){if(exn.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+e);if(t!=xn.Z_FILTERED&&t!=xn.Z_HUFFMAN_ONLY&&t!=xn.Z_RLE&&t!=xn.Z_FIXED&&t!=xn.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+t);if(this._level!==e||this._strategy!==t){var n=this;this.flush(xn.Z_SYNC_FLUSH,(function(){n._binding.params(e,t),n._hadError||(n._level=e,n._strategy=t,r&&r())}))}else pe(r)},Dn.prototype.reset=function(){return this._binding.reset()},Dn.prototype._flush=function(e){this._transform(new _(0),"",e)},Dn.prototype.flush=function(e,t){var r=this._writableState;if(("function"==typeof e||void 0===e&&!t)&&(t=e,e=xn.Z_FULL_FLUSH),r.ended)t&&pe(t);else if(r.ending)t&&this.once("end",t);else if(r.needDrain){var n=this;this.once("drain",(function(){n.flush(t)}))}else this._flushFlag=e,this.write(new _(0),"",t)},Dn.prototype.close=function(e){if(e&&pe(e),!this._closed){this._closed=!0,this._binding.close();var t=this;pe((function(){t.emit("close")}))}},Dn.prototype._transform=function(e,t,r){var n,i=this._writableState,o=(i.ending||i.ended)&&(!e||i.length===e.length);if(null===!e&&!$(e))return r(new Error("invalid input"));o?n=xn.Z_FINISH:(n=this._flushFlag,e.length>=i.length&&(this._flushFlag=this._opts.flush||xn.Z_NO_FLUSH)),this._processChunk(e,n,r)},Dn.prototype._processChunk=function(e,t,r){var n=e&&e.length,i=this._chunkSize-this._offset,o=0,s=this,a="function"==typeof r;if(!a){var h,l=[],f=0;this.on("error",(function(e){h=e}));do{var c=this._binding.writeSync(t,e,o,n,this._buffer,this._offset,i)}while(!this._hadError&&p(c[0],c[1]));if(this._hadError)throw h;var u=_.concat(l,f);return this.close(),u}var d=this._binding.write(t,e,o,n,this._buffer,this._offset,i);function p(h,c){if(!s._hadError){var u=i-c;if(function(e,t){if(!e)throw new Error("have should not go down")}(u>=0),u>0){var d=s._buffer.slice(s._offset,s._offset+u);s._offset+=u,a?s.push(d):(l.push(d),f+=d.length)}if((0===c||s._offset>=s._chunkSize)&&(i=s._chunkSize,s._offset=0,s._buffer=new _(s._chunkSize)),0===c){if(o+=n-h,n=h,!a)return!0;var g=s._binding.write(t,e,o,n,s._buffer,s._offset,s._chunkSize);return g.callback=p,void(g.buffer=e)}if(!a)return!1;r()}}d.buffer=e,d.callback=p},ze(An,Dn),ze(Bn,Dn),ze(zn,Dn),ze(Ln,Dn),ze(Tn,Dn),ze(Mn,Dn),ze(Cn,Dn);var In=function(e,t){return Rn(new An(t),e)},Pn=function(e,t){return Rn(new Bn(t),e)};return class{constructor(e,t,r){this.SDKAPPID=e,this.EXPIRETIME=r,this.PRIVATEKEY=t}genTestUserSig(e){return this._isNumber(this.SDKAPPID)?this._isString(this.PRIVATEKEY)?this._isString(e)?this._isNumber(this.EXPIRETIME)?(console.log("sdkAppID="+this.SDKAPPID+" key="+this.PRIVATEKEY+" userID="+e+" expire="+this.EXPIRETIME),this.genSigWithUserbuf(e,this.EXPIRETIME,null)):(console.error("expireTime must be a number"),""):(console.error("userID must be a string"),""):(console.error("privateKey must be a string"),""):(console.error("sdkAppID must be a number"),"")}newBuffer(e,t){return _.from?_.from(e,t):new _(e,t)}unescape(e){return e.replace(/_/g,"=").replace(/\-/g,"/").replace(/\*/g,"+")}escape(e){return e.replace(/\+/g,"*").replace(/\//g,"-").replace(/=/g,"_")}encode(e){return this.escape(this.newBuffer(e).toString("base64"))}decode(e){return this.newBuffer(this.unescape(e),"base64")}base64encode(e){return this.newBuffer(e).toString("base64")}base64decode(e){return this.newBuffer(e,"base64").toString()}_hmacsha256(e,t,r,n){let i="TLS.identifier:"+e+"\n";i+="TLS.sdkappid:"+this.SDKAPPID+"\n",i+="TLS.time:"+t+"\n",i+="TLS.expire:"+r+"\n",null!=n&&(i+="TLS.userbuf:"+n+"\n");let o=re.HmacSHA256(i,this.PRIVATEKEY);return re.enc.Base64.stringify(o)}_utc(){return Math.round(Date.now()/1e3)}_isNumber(e){return null!==e&&("number"==typeof e&&!isNaN(e-0)||"object"==typeof e&&e.constructor===Number)}_isString(e){return"string"==typeof e}genSigWithUserbuf(e,t,r){let n=this._utc(),i={"TLS.ver":"2.0","TLS.identifier":e,"TLS.sdkappid":this.SDKAPPID,"TLS.time":n,"TLS.expire":t},o="";if(null!=r){let s=this.base64encode(r);i["TLS.userbuf"]=s,o=this._hmacsha256(e,n,t,s)}else o=this._hmacsha256(e,n,t,null);i["TLS.sig"]=o;let s=JSON.stringify(i),a=In(this.newBuffer(s)).toString("base64"),h=this.escape(a);return console.log("ret="+h),h}validate(e){let t=this.decode(e),r=Pn(t);console.log("validate ret="+r)}}}()}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var n=r(297);return n.default})())); \ No newline at end of file diff --git a/TRTC-Simple-Demo/web/js/TrtcWrapper.2.0.0-dev.0.0.2.bundle.js b/TRTC-Simple-Demo/web/js/TrtcWrapper.2.0.0-dev.0.0.2.bundle.js deleted file mode 100644 index 888a0a3..0000000 --- a/TRTC-Simple-Demo/web/js/TrtcWrapper.2.0.0-dev.0.0.2.bundle.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.TrtcWrapper=t():e.TrtcWrapper=t()}(self,(()=>(()=>{var e={79:function(e,t,i){var r;r=function(e,t){var i=function(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}(t),r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])},r(e,t)},n=function(){return n=Object.assign||function(e){for(var t,i=1,r=arguments.length;i0&&n[n.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!n||a[1]>n[0]&&a[1]0&&clearTimeout(s),s=window.setTimeout((function(){o.apply(e,t),s=-1}),30)})),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}(c,t),c.getTRTCShareInstance=function(e){return Q||(Q=new c(e)),Q},c.prototype.destroyTRTCShareInstance=function(){Q&&(this._removeTRTCEvents(),Q._destroy(),Q=null)},c.prototype.getSDKVersion=function(){return this._version||""},c.prototype.enterRoom=function(e,t){return o(this,void 0,Promise,(function(){var i,r,o,a,c,l,u,d,h,p,m,_,f,g,T,v;return s(this,(function(s){switch(s.label){case 0:if(i=e.sdkAppId,r=e.userId,o=e.userSig,a=e.roomId,c=e.strRoomId,l=e.role,u=e.privateMapKey,d=e.businessInfo,h=e.enableAutoPlayDialog,p=e.proxy,m=e.streamId,_=e.userDefineRecordId,this.logger.update({sdkAppId:i,userId:r}),this.logger.info("".concat(Y,".enterRoom with params: "),e,t),!(i&&r&&o))return[3,5];s.label=1;case 1:return s.trys.push([1,3,,4]),f={sdkAppId:i,userId:r,userSig:o,roomId:a,strRoomId:c,role:M[l],scene:L[t],autoReceiveAudio:this._autoRecvAudio,autoReceiveVideo:this._autoRecvVideo,frameWorkType:this._frameWorkType,component:this._component,language:this._language},f=u?n(n({},f),{privateMapKey:u}):f,f=d?n(n({},f),{businessInfo:d}):f,f=h?n(n({},f),{enableAutoPlayDialog:h}):f,f=p?n(n({},f),{proxy:p}):f,f=m?n(n({},f),{streamId:m}):f,f=_?n(n({},f),{userDefineRecordId:_}):f,g=x(),[4,this._trtc.enterRoom(f)];case 2:return s.sent(),T=x()-g,this.emit("onEnterRoom",T),[3,4];case 3:return v=s.sent(),this.emit("onEnterRoom",-1),this._callFunctionErrorManage(v,"enterRoom"),[3,4];case 4:return[3,6];case 5:this._emitError(W),s.label=6;case 6:return[2]}}))}))},c.prototype.exitRoom=function(){return o(this,void 0,Promise,(function(){var e;return s(this,(function(t){switch(t.label){case 0:return t.trys.push([0,4,,5]),this.logger.info("".concat(Y,".enterRoom")),this._isSharingScreen?[4,this.stopScreenShare()]:[3,2];case 1:t.sent(),t.label=2;case 2:return[4,this._trtc.exitRoom()];case 3:return t.sent(),[3,5];case 4:return e=t.sent(),this._callFunctionErrorManage(e,"exitRoom"),[3,5];case 5:return[2]}}))}))},c.prototype.switchRole=function(e){return o(this,void 0,void 0,(function(){var t;return s(this,(function(i){switch(i.label){case 0:this.logger.info("".concat(Y,".switchRole with param: "),e),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,this._trtc.switchRole(M[e])];case 2:return i.sent(),this.emit("onSwitchRole",0,"switch role success, role = ".concat(e,", ").concat(M[e])),[3,4];case 3:return t=i.sent(),this.emit("onSwitchRole",null==t?void 0:t.getCode(),t.message),[3,4];case 4:return[2]}}))}))},c.prototype.setDefaultStreamRecvMode=function(e,t){return o(this,void 0,void 0,(function(){return s(this,(function(i){return this.logger.info("".concat(Y,".setDefaultStreamRecvMode with param: "),{autoRecvAudio:e,autoRecvVideo:t}),j(e)&&(this._autoRecvAudio=e),j(t)&&(this._autoRecvVideo=t),[2]}))}))},c.prototype._updateLocalVideo=function(){return o(this,void 0,void 0,(function(){var e;return s(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this._trtc.updateLocalVideo(this._generateLocalVideoData())];case 1:return t.sent(),[3,3];case 2:if((e=t.sent()).code===i.default.ERROR_CODE.OPERATION_ABORT)return[2];throw e;case 3:return[2]}}))}))},c.prototype._updateLocalTestVideo=function(){return o(this,void 0,void 0,(function(){var e;return s(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this._testTrtc.updateLocalVideo(this._generateLocalTestVideoData())];case 1:return t.sent(),[3,3];case 2:if((e=t.sent()).code===i.default.ERROR_CODE.OPERATION_ABORT)return[2];throw e;case 3:return[2]}}))}))},c.prototype._updateRemoteVideo=function(e,t){return o(this,void 0,void 0,(function(){var r;return s(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,this._trtc.updateRemoteVideo(this._generateRemoteVideoData(e,t))];case 1:return n.sent(),[3,3];case 2:if((r=n.sent()).code===i.default.ERROR_CODE.OPERATION_ABORT)return[2];throw r;case 3:return[2]}}))}))},c.prototype.startLocalPreview=function(){for(var t=[],r=0;r1&&i[1]),height:+(i.length>2&&i[2])}},c.prototype._getTRTCVideoProfile=function(t,i){var r=i.videoResolution,n=i.videoFps,o=i.videoBitrate,s=i.resMode,a={};switch(t){case"screen":a=this._defaultScreenProfile;break;case"small":a=this._defaultSmallVideoProfile;break;default:a=this._defaultVideoProfile}if(!B(r)){var c=this._getTRTCResolution(r);a.width=c.width,a.height=c.height}if(!B(s)&&s===e.TRTCVideoResolutionMode.TRTCVideoResolutionModePortrait){var l=a.height,u=a.width;a.width=l,a.height=u}return n&&(a.frameRate=n),o&&(a.bitrate=o),a},c.prototype._getTRTCStreamType=function(t){var r;return((r={})[e.TRTCVideoStreamType.TRTCVideoStreamTypeBig]=i.default.TYPE.STREAM_TYPE_MAIN,r[e.TRTCVideoStreamType.TRTCVideoStreamTypeSmall]=i.default.TYPE.STREAM_TYPE_MAIN,r[e.TRTCVideoStreamType.TRTCVideoStreamTypeSub]=i.default.TYPE.STREAM_TYPE_SUB,r)[t]},c.prototype._getTRTCFillMode=function(t){var i;return((i={})[e.TRTCVideoFillMode.TRTCVideoFillMode_Fill]=F.COVER,i[e.TRTCVideoFillMode.TRTCVideoFillMode_Fit]=F.CONTAIN,i)[t]},c.prototype._getTRTCMirror=function(t){var i;return t===e.TRTCVideoMirrorType.TRTCVideoMirrorType_Auto?!this._getIsMobile()||this._getIsFrontCamera():((i={})[e.TRTCVideoMirrorType.TRTCVideoMirrorType_Enable]=!0,i[e.TRTCVideoMirrorType.TRTCVideoMirrorType_Disable]=!1,i)[t]},c.prototype._getTRTCCloudDeviceType=function(t){return{camera:e.TRTCDeviceType.TRTCDeviceTypeCamera,microphone:e.TRTCDeviceType.TRTCDeviceTypeMic,speaker:e.TRTCDeviceType.TRTCDeviceTypeSpeaker}[t]},c.prototype._getTRTCCloudDeviceState=function(t){return{add:e.TRTCDeviceState.TRTCDeviceStateAdd,remove:e.TRTCDeviceState.TRTCDeviceStateRemove,active:e.TRTCDeviceState.TRTCDeviceStateActive}[t]},c.prototype._getTRTCCloudQuality=function(t){return[e.TRTCQuality.TRTCQuality_Unknown,e.TRTCQuality.TRTCQuality_Excellent,e.TRTCQuality.TRTCQuality_Good,e.TRTCQuality.TRTCQuality_Poor,e.TRTCQuality.TRTCQuality_Bad,e.TRTCQuality.TRTCQuality_Vbad,e.TRTCQuality.TRTCQuality_Down][t]},c.prototype._generateLocalVideoData=function(){var e={view:this._getLocalView(),publish:this._getIsVideoPublish(),option:n({profile:this._getVideoProfile(),small:this._getSmallStreamVideoProfile()},this._getVideoPlayOption())};return this._getIsMobile()?e&&Object.assign(e.option,{useFrontCamera:this._getIsFrontCamera()}):e&&Object.assign(e.option,{cameraId:this._getCurrentCameraId()}),e},c.prototype._generateLocalTestVideoData=function(){return{view:this._getLocalTestView(),publish:!1,option:n({cameraId:this._getCurrentCameraId(),profile:this._getVideoProfile()},this._getVideoPlayOption())}},c.prototype._generateLocalAudioData=function(){return{publish:this._getIsAudioPublish(),option:{microphoneId:this._getCurrentMicrophoneId(),profile:this._getAudioProfile()}}},c.prototype._generateRemoteVideoData=function(e,t){return this._remoteStreamConfig.get("".concat(e,"_").concat(this._getTRTCStreamType(t)))},c.prototype._addTRTCEvents=function(){var t=this;this._trtc.on(i.default.EVENT.ERROR,(function(e){var i;e&&t.emit("onError",null===(i=null==e?void 0:e.getCode)||void 0===i?void 0:i.getCode(),e.message)})),this._trtc.on(i.default.EVENT.REMOTE_USER_ENTER,(function(e){(null==e?void 0:e.userId)&&t.emit("onRemoteUserEnterRoom",e.userId)})),this._trtc.on(i.default.EVENT.REMOTE_USER_EXIT,(function(e){(null==e?void 0:e.userId)&&t.emit("onRemoteUserLeaveRoom",e.userId)})),this._trtc.on(i.default.EVENT.REMOTE_AUDIO_AVAILABLE,(function(e){(null==e?void 0:e.userId)&&t.emit("onUserAudioAvailable",e.userId,!0)})),this._trtc.on(i.default.EVENT.REMOTE_AUDIO_UNAVAILABLE,(function(e){(null==e?void 0:e.userId)&&t.emit("onUserAudioAvailable",e.userId,!1)})),this._trtc.on(i.default.EVENT.REMOTE_VIDEO_AVAILABLE,(function(e){t._emitVideoAvailable(e,!0)})),this._trtc.on(i.default.EVENT.REMOTE_VIDEO_UNAVAILABLE,(function(e){t._emitVideoAvailable(e,!1)})),this._trtc.on(i.default.EVENT.AUDIO_VOLUME,(function(e){(null==e?void 0:e.result)&&t.emit("onUserVoiceVolume",null==e?void 0:e.result,((null==e?void 0:e.result)||[]).length)})),this._trtc.on(i.default.EVENT.NETWORK_QUALITY,(function(e){var i=e.uplinkNetworkQuality,r=e.downlinkNetworkQuality,n=e.uplinkRTT,o=e.uplinkLoss,s=e.downlinkLoss,a=e.downlinkInfo,c=new C("",t._getTRTCCloudQuality(i)),l=[];a.length>0&&(l=a.map((function(e){return new C(e.userId,t._getTRTCCloudQuality(r))}))),t.emit("onNetworkQuality",c,l);var u=new A(o,s,0,0,n,0,0);t.emit("onStatistics",u)})),this._trtc.on(i.default.EVENT.SCREEN_SHARE_STOPPED,(function(){t.emit("onScreenCaptureStopped",0),t._isSharingScreen=!1})),this._trtc.on(i.default.EVENT.PUBLISH_STATE_CHANGED,(function(i){var r=i.mediaType;"started"===i.state&&("audio"===r?t.emit("onSendFirstLocalAudioFrame"):"video"===r?t.emit("onSendFirstLocalVideoFrame",e.TRTCVideoStreamType.TRTCVideoStreamTypeBig):"screen"===r&&t.emit("onSendFirstLocalVideoFrame",e.TRTCVideoStreamType.TRTCVideoStreamTypeSub))}))},c.prototype._removeTRTCEvents=function(){this._trtc.off("*")},c.prototype._emitVideoAvailable=function(e,t){var r=e.userId,n=e.streamType;t?this._remoteStreamMap.set("".concat(r,"_").concat(n),!0):this._remoteStreamMap.delete("".concat(r,"_").concat(n)),n===i.default.TYPE.STREAM_TYPE_SUB?r&&this.emit("onUserSubStreamAvailable",r,t):r&&this.emit("onUserVideoAvailable",r,t)},c.prototype._setLocalView=function(e){this._localView=e},c.prototype._getLocalView=function(){return this._localView},c.prototype._setIsMobile=function(e){this._isMobile=e},c.prototype._getIsMobile=function(){return this._isMobile},c.prototype._setIsFrontCamera=function(e){this._isFrontCamera=e},c.prototype._getIsFrontCamera=function(){return this._isFrontCamera},c.prototype._getSmallStreamVideoProfile=function(){return this._smallStreamVideoProfile},c.prototype._setSmallStreamVideoProfile=function(e){this._smallStreamVideoProfile=e},c.prototype._setIsVideoPublish=function(e){this._isVideoPublish=e},c.prototype._getIsVideoPublish=function(){return this._isVideoPublish},c.prototype._setVideoProfile=function(e){this._videoProfile=e},c.prototype._getVideoProfile=function(){return this._videoProfile},c.prototype._setVideoPlayOption=function(e){this._videoPlayOption=e},c.prototype._getVideoPlayOption=function(){return this._videoPlayOption},c.prototype._setLocalTestView=function(e){this._localTestView=e},c.prototype._getLocalTestView=function(){return this._localTestView},c.prototype._setScreenShareParams=function(e){var t=e.view,i=e.systemAudio,r=e.fillMode,n=e.profile;B(t)||(this._screenShareParams.view=t),B(i)||(this._screenShareParams.option.systemAudio=i),B(r)||(this._screenShareParams.option.fillMode=r),B(n)||(this._screenShareParams.option.profile=n)},c.prototype._getScreenShareParams=function(){return this._screenShareParams},c.prototype._setIsAudioPublish=function(e){this._isAudioPublish=e},c.prototype._getIsAudioPublish=function(){return this._isAudioPublish},c.prototype._setAudioProfile=function(e){this._audioProfile=e},c.prototype._getAudioProfile=function(){return this._audioProfile},c.prototype._setCurrentCameraId=function(e){this._currentCameraId=e},c.prototype._getCurrentCameraId=function(){return this._currentCameraId},c.prototype._setCurrentMicrophoneId=function(e){this._currentMicrophoneId=e},c.prototype._getCurrentMicrophoneId=function(){return this._currentMicrophoneId},c.prototype._setCurrentSpeakerId=function(e){this._currentSpeakerId=e},c.prototype._getCurrentSpeakerId=function(){return this._currentSpeakerId},c.prototype._setRemoteStreamConfig=function(t,i,r){var n=this._remoteStreamConfig.get("".concat(t,"_").concat(this._getTRTCStreamType(i)));n||(n={userId:t,streamType:this._getTRTCStreamType(i),option:{mirror:this._getTRTCMirror(e.TRTCVideoMirrorType.TRTCVideoMirrorType_Disable),fillMode:this._getTRTCFillMode(e.TRTCVideoFillMode.TRTCVideoFillMode_Fit)}});var o=r.view,s=r.mirrorType,a=r.fillMode,c=r.small;B(o)||(n.view=o),B(s)||(n.option.mirror=this._getTRTCMirror(s)),B(a)||(n.option.fillMode=this._getTRTCFillMode(a)),B(c)||(n.option.small=c),this._remoteStreamConfig.set("".concat(t,"_").concat(this._getTRTCStreamType(i)),n)},c.prototype.handleDeviceChange=function(){return o(this,void 0,void 0,(function(){var t=this;return s(this,(function(r){return i.default.getCameraList().then((function(i){return o(t,void 0,void 0,(function(){return s(this,(function(t){switch(t.label){case 0:return this._cameraList.length===i.length?[2]:[4,this.deviceChangeManage(this._cameraList,i,e.TRTCDeviceType.TRTCDeviceTypeCamera)];case 1:return t.sent(),this._cameraList=i,[2]}}))}))})),i.default.getMicrophoneList().then((function(i){return o(t,void 0,void 0,(function(){return s(this,(function(t){switch(t.label){case 0:return[4,this.deviceChangeManage(this._microphoneList,i,e.TRTCDeviceType.TRTCDeviceTypeMic)];case 1:return t.sent(),this._microphoneList=i,[2]}}))}))})),i.default.getSpeakerList().then((function(i){return o(t,void 0,void 0,(function(){return s(this,(function(t){switch(t.label){case 0:return[4,this.deviceChangeManage(this._speakerList,i,e.TRTCDeviceType.TRTCDeviceTypeSpeaker)];case 1:return t.sent(),this._speakerList=i,[2]}}))}))})),[2]}))}))},c.prototype.isSameDevice=function(e,t){var i=e&&e.deviceId&&e.groupId&&e.label,r=t&&t.deviceId&&t.groupId&&t.label;return!(!i||!r)&&e.deviceId===t.deviceId&&e.groupId===t.groupId&&e.label===t.label},c.prototype.deviceChangeManage=function(t,i,r){return o(this,void 0,void 0,(function(){var n,o,a,c,l;return s(this,(function(s){switch(s.label){case 0:return n=void 0,t.length!==i.length&&(o=(i||[]).map((function(e){return e.deviceId})),a=new y,t.length>i.length?(a=t.filter((function(e){return!o.includes(e.deviceId)}))[0]||{},n=e.TRTCDeviceState.TRTCDeviceStateRemove):(o=(t||[]).map((function(e){return e.deviceId})),a=i.filter((function(e){return!o.includes(e.deviceId)}))[0]||{},n=e.TRTCDeviceState.TRTCDeviceStateAdd),c=a.deviceId,this.emitOnDeviceChange(c,r,n)),l=this.getDefaultDeviceInfo(i),r!==e.TRTCDeviceType.TRTCDeviceTypeCamera||n!==e.TRTCDeviceState.TRTCDeviceStateRemove?[3,3]:this.isSameDevice(this._currentCamera,l)?[2]:l.deviceId?[4,this.autoChangeDevice(r,l)]:[3,2];case 1:s.sent(),s.label=2;case 2:s.label=3;case 3:return r!==e.TRTCDeviceType.TRTCDeviceTypeMic?[3,6]:this.isSameDevice(this._currentMicrophone,l)?[2]:l.deviceId?[4,this.autoChangeDevice(r,l)]:[3,5];case 4:s.sent(),s.label=5;case 5:s.label=6;case 6:return r!==e.TRTCDeviceType.TRTCDeviceTypeSpeaker?[3,9]:this.isSameDevice(this._currentSpeaker,l)?[2]:l.deviceId?[4,this.autoChangeDevice(r,l)]:[3,8];case 7:s.sent(),s.label=8;case 8:s.label=9;case 9:return[2]}}))}))},c.prototype.getDefaultDeviceInfo=function(e){var t=new y;if(0===e.length)return t;var i=e.filter((function(e){return"default"===e.deviceId}));return i.length>0?i[0]:e[0]},c.prototype.autoChangeDevice=function(t,r){return o(this,void 0,void 0,(function(){var n,o,a,c,l;return s(this,(function(s){switch(s.label){case 0:if(n=r.deviceId,t!==e.TRTCDeviceType.TRTCDeviceTypeCamera)return[3,8];s.label=1;case 1:return s.trys.push([1,3,,4]),[4,this._trtc.updateLocalVideo({option:{cameraId:n}})];case 2:return s.sent(),[3,4];case 3:return o=s.sent(),console.log("error",JSON.stringify(o)),o.code,i.default.ERROR_CODE.OPERATION_ABORT,[3,4];case 4:return s.trys.push([4,6,,7]),[4,this._testTrtc.updateLocalVideo({option:{cameraId:n}})];case 5:return s.sent(),[3,7];case 6:return a=s.sent(),console.log("testTRTC error",JSON.stringify(a)),a.code,i.default.ERROR_CODE.OPERATION_ABORT,[3,7];case 7:this._currentCameraId=n,this._currentCamera=r,this.emitOnDeviceChange(n,t,e.TRTCDeviceState.TRTCDeviceStateActive),s.label=8;case 8:if(t!==e.TRTCDeviceType.TRTCDeviceTypeMic)return[3,16];s.label=9;case 9:return s.trys.push([9,11,,12]),[4,this._trtc.updateLocalAudio({option:{microphoneId:n}})];case 10:return s.sent(),[3,12];case 11:return c=s.sent(),console.log("error",JSON.stringify(c)),c.code,i.default.ERROR_CODE.OPERATION_ABORT,[3,12];case 12:return s.trys.push([12,14,,15]),[4,this._testTrtc.updateLocalAudio({option:{microphoneId:n}})];case 13:return s.sent(),[3,15];case 14:return l=s.sent(),console.log("testTRTC error",JSON.stringify(l)),l.code,i.default.ERROR_CODE.OPERATION_ABORT,[3,15];case 15:this._currentMicrophoneId=n,this._currentMicrophone=r,this.emitOnDeviceChange(n,t,e.TRTCDeviceState.TRTCDeviceStateActive),s.label=16;case 16:return t!==e.TRTCDeviceType.TRTCDeviceTypeSpeaker?[3,18]:[4,i.default.setCurrentSpeaker(n)];case 17:s.sent(),this._currentSpeakerId=n,this._currentSpeaker=r,this.emitOnDeviceChange(n,t,e.TRTCDeviceState.TRTCDeviceStateActive),s.label=18;case 18:return[2]}}))}))},c.prototype.emitOnDeviceChange=function(e,t,i){this.emit("onDeviceChange",e,t,i)},c}(f);e.Rect=function(e,t,i,r){void 0===e&&(e=0),void 0===t&&(t=0),void 0===i&&(i=0),void 0===r&&(r=0),this.left=e,this.top=t,this.right=i,this.bottom=r},e.TRTCDeviceInfo=y,e.TRTCImageBuffer=w,e.TRTCLocalStatistics=function(t,i,r,n,o,s,a){void 0===t&&(t=0),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0),void 0===o&&(o=0),void 0===s&&(s=0),void 0===a&&(a=e.TRTCVideoStreamType.TRTCVideoStreamTypeBig),this.width=t,this.height=i,this.frameRate=r,this.videoBitrate=n,this.audioSampleRate=o,this.audioBitrate=s,this.streamType=a},e.TRTCMixUser=function(t,i,r,n,o,s,a,c){void 0===t&&(t=""),void 0===i&&(i=""),void 0===r&&(r=null),void 0===n&&(n=0),void 0===o&&(o=!1),void 0===s&&(s=e.TRTCVideoStreamType.TRTCVideoStreamTypeBig),void 0===a&&(a=e.TRTCMixInputType.TRTCMixInputTypeUndefined),void 0===c&&(c=0),this.userId=t,this.roomId=i,this.rect=r,this.zOrder=n,this.pureAudio=o,this.streamType=s,this.inputType=a,this.renderMode=c},e.TRTCNetworkQosParam=function(t,i){void 0===t&&(t=e.TRTCVideoQosPreference.TRTCVideoQosPreferenceClear),void 0===i&&(i=e.TRTCQosControlMode.TRTCQosControlModeServer),this.preference=t,this.controlMode=i},e.TRTCParams=function(t,i,r,n,o,s,a,c,l,u,d){void 0===t&&(t=0),void 0===i&&(i=""),void 0===r&&(r=""),void 0===n&&(n=0),void 0===o&&(o=""),void 0===s&&(s=e.TRTCRoleType.TRTCRoleAnchor),void 0===a&&(a=null),void 0===l&&(l=null),void 0===u&&(u=null),void 0===d&&(d=30),this.sdkAppId=t,this.userId=i,this.userSig=r,this.roomId=n,this.strRoomId=o,this.role=s,this.privateMapKey=a,this.streamId=l,this.userDefineRecordId=u,this.frameWorkType=d},e.TRTCPublishCDNParam=function(e,t,i){void 0===e&&(e=0),void 0===t&&(t=0),void 0===i&&(i=null),this.appId=e,this.bizId=t,this.url=i},e.TRTCQualityInfo=C,e.TRTCRenderParams=function(t,i,r){void 0===t&&(t=e.TRTCVideoRotation.TRTCVideoRotation0),void 0===i&&(i=e.TRTCVideoFillMode.TRTCVideoFillMode_Fit),void 0===r&&(r=e.TRTCVideoMirrorType.TRTCVideoMirrorType_Disable),this.rotation=t,this.fillMode=i,this.mirrorType=r},e.TRTCScreenCaptureSourceInfo=function(t,i,r,n,o,s){void 0===t&&(t=e.TRTCScreenCaptureSourceType.TRTCScreenCaptureSourceTypeUnknown),void 0===i&&(i=""),void 0===r&&(r=""),void 0===n&&(n=new w),void 0===o&&(o=new w),void 0===s&&(s=!1),this.type=t,this.sourceId=i,this.sourceName=r,this.thumbBGRA=n,this.iconBGRA=o,this.isMinimizeWindow=s},e.TRTCStatistics=A,e.TRTCTranscodingConfig=function(t,i,r,n,o,s,a,c,l,u,d,h,p,m,_){void 0===t&&(t=e.TRTCTranscodingConfigMode.TRTCTranscodingConfigMode_Unknown),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0),void 0===o&&(o=0),void 0===s&&(s=0),void 0===a&&(a=15),void 0===c&&(c=2),void 0===l&&(l=0),void 0===u&&(u=""),void 0===d&&(d=64),void 0===h&&(h=48e3),void 0===p&&(p=1),void 0===m&&(m=[]),void 0===_&&(_=""),this.mode=t,this.appId=i,this.bizId=r,this.videoWidth=n,this.videoHeight=o,this.videoBitrate=s,this.videoFramerate=a,this.videoGOP=c,this.backgroundColor=l,this.backgroundImage=u,this.audioSampleRate=d,this.audioBitrate=h,this.audioChannels=p,this.mixUsersArray=m,this.mixUsersArraySize=m.length,this.streamId=_},e.TRTCVideoEncParam=function(t,i,r,n){void 0===t&&(t=e.TRTCVideoResolution.TRTCVideoResolution_640_360),void 0===i&&(i=e.TRTCVideoResolutionMode.TRTCVideoResolutionModeLandscape),void 0===r&&(r=15),void 0===n&&(n=550),this.videoResolution=t,this.resMode=i,this.videoFps=r,this.videoBitrate=n},e.TRTCVolumeInfo=function(e,t){void 0===e&&(e=""),void 0===t&&(t=0),this.userId=e,this.volume=t},e.default=X,Object.defineProperty(e,"__esModule",{value:!0})},r(t,i(734))},734:function(e,t,i){e.exports=function(){var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==i.g?i.g:"undefined"!=typeof self?self:{},t=function(e){try{return!!e()}catch(e){return!0}},r=!t((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),n=r,o=Function.prototype,s=o.call,a=n&&o.bind.bind(s,s),c=n?a:function(e){return function(){return s.apply(e,arguments)}},l=c,u=l({}.toString),d=l("".slice),h=function(e){return d(u(e),8,-1)},p=t,m=h,_=Object,f=c("".split),g=p((function(){return!_("z").propertyIsEnumerable(0)}))?function(e){return"String"==m(e)?f(e,""):_(e)}:_,T=function(e){return null==e},v=T,S=TypeError,y=function(e){if(v(e))throw S("Can't call method on "+e);return e},E=g,I=y,R=function(e){return E(I(e))},C=function(e){return e&&e.Math==Math&&e},A=C("object"==typeof globalThis&&globalThis)||C("object"==typeof window&&window)||C("object"==typeof self&&self)||C("object"==typeof e&&e)||function(){return this}()||Function("return this")(),b={},k={get exports(){return b},set exports(e){b=e}},D=A,w=Object.defineProperty,O=function(e,t){try{w(D,e,{value:t,configurable:!0,writable:!0})}catch(i){D[e]=t}return t},N=O,P="__core-js_shared__",M=A[P]||N(P,{}),L=M;(k.exports=function(e,t){return L[e]||(L[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.30.0",mode:"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.30.0/LICENSE",source:"https://github.com/zloirock/core-js"});var V,x,U=y,F=Object,B=function(e){return F(U(e))},H=B,j=c({}.hasOwnProperty),W=Object.hasOwn||function(e,t){return j(H(e),t)},G=c,J=0,K=Math.random(),Q=G(1..toString),z=function(e){return"Symbol("+(void 0===e?"":e)+")_"+Q(++J+K,36)},Y="undefined"!=typeof navigator&&String(navigator.userAgent)||"",q=A,X=Y,$=q.process,Z=q.Deno,ee=$&&$.versions||Z&&Z.version,te=ee&&ee.v8;te&&(x=(V=te.split("."))[0]>0&&V[0]<4?1:+(V[0]+V[1])),!x&&X&&(!(V=X.match(/Edge\/(\d+)/))||V[1]>=74)&&(V=X.match(/Chrome\/(\d+)/))&&(x=+V[1]);var ie=x,re=ie,ne=t,oe=!!Object.getOwnPropertySymbols&&!ne((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&re&&re<41})),se=oe&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ae=b,ce=W,le=z,ue=oe,de=se,he=A.Symbol,pe=ae("wks"),me=de?he.for||he:he&&he.withoutSetter||le,_e=function(e){return ce(pe,e)||(pe[e]=ue&&ce(he,e)?he[e]:me("Symbol."+e)),pe[e]},fe="object"==typeof document&&document.all,ge={all:fe,IS_HTMLDDA:void 0===fe&&void 0!==fe},Te=ge.all,ve=ge.IS_HTMLDDA?function(e){return"function"==typeof e||e===Te}:function(e){return"function"==typeof e},Se=ve,ye=ge.all,Ee=ge.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:Se(e)||e===ye}:function(e){return"object"==typeof e?null!==e:Se(e)},Ie=Ee,Re=String,Ce=TypeError,Ae=function(e){if(Ie(e))return e;throw Ce(Re(e)+" is not an object")},be={},ke=!t((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),De=ke&&t((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),we={},Oe=Ee,Ne=A.document,Pe=Oe(Ne)&&Oe(Ne.createElement),Me=function(e){return Pe?Ne.createElement(e):{}},Le=Me,Ve=!ke&&!t((function(){return 7!=Object.defineProperty(Le("div"),"a",{get:function(){return 7}}).a})),xe=r,Ue=Function.prototype.call,Fe=xe?Ue.bind(Ue):function(){return Ue.apply(Ue,arguments)},Be=A,He=ve,je=function(e,t){return arguments.length<2?(i=Be[e],He(i)?i:void 0):Be[e]&&Be[e][t];var i},We=c({}.isPrototypeOf),Ge=je,Je=ve,Ke=We,Qe=Object,ze=se?function(e){return"symbol"==typeof e}:function(e){var t=Ge("Symbol");return Je(t)&&Ke(t.prototype,Qe(e))},Ye=String,qe=function(e){try{return Ye(e)}catch(e){return"Object"}},Xe=ve,$e=qe,Ze=TypeError,et=function(e){if(Xe(e))return e;throw Ze($e(e)+" is not a function")},tt=et,it=T,rt=function(e,t){var i=e[t];return it(i)?void 0:tt(i)},nt=Fe,ot=ve,st=Ee,at=TypeError,ct=Fe,lt=Ee,ut=ze,dt=rt,ht=TypeError,pt=_e("toPrimitive"),mt=function(e,t){if(!lt(e)||ut(e))return e;var i,r=dt(e,pt);if(r){if(void 0===t&&(t="default"),i=ct(r,e,t),!lt(i)||ut(i))return i;throw ht("Can't convert object to primitive value")}return void 0===t&&(t="number"),function(e,t){var i,r;if("string"===t&&ot(i=e.toString)&&!st(r=nt(i,e)))return r;if(ot(i=e.valueOf)&&!st(r=nt(i,e)))return r;if("string"!==t&&ot(i=e.toString)&&!st(r=nt(i,e)))return r;throw at("Can't convert object to primitive value")}(e,t)},_t=mt,ft=ze,gt=function(e){var t=_t(e,"string");return ft(t)?t:t+""},Tt=ke,vt=Ve,St=De,yt=Ae,Et=gt,It=TypeError,Rt=Object.defineProperty,Ct=Object.getOwnPropertyDescriptor,At="enumerable",bt="configurable",kt="writable";we.f=Tt?St?function(e,t,i){if(yt(e),t=Et(t),yt(i),"function"==typeof e&&"prototype"===t&&"value"in i&&kt in i&&!i[kt]){var r=Ct(e,t);r&&r[kt]&&(e[t]=i.value,i={configurable:bt in i?i[bt]:r[bt],enumerable:At in i?i[At]:r[At],writable:!1})}return Rt(e,t,i)}:Rt:function(e,t,i){if(yt(e),t=Et(t),yt(i),vt)try{return Rt(e,t,i)}catch(e){}if("get"in i||"set"in i)throw It("Accessors not supported");return"value"in i&&(e[t]=i.value),e};var Dt=Math.ceil,wt=Math.floor,Ot=Math.trunc||function(e){var t=+e;return(t>0?wt:Dt)(t)},Nt=Ot,Pt=function(e){var t=+e;return t!=t||0===t?0:Nt(t)},Mt=Pt,Lt=Math.max,Vt=Math.min,xt=function(e,t){var i=Mt(e);return i<0?Lt(i+t,0):Vt(i,t)},Ut=Pt,Ft=Math.min,Bt=function(e){return e>0?Ft(Ut(e),9007199254740991):0},Ht=Bt,jt=function(e){return Ht(e.length)},Wt=R,Gt=xt,Jt=jt,Kt=function(e){return function(t,i,r){var n,o=Wt(t),s=Jt(o),a=Gt(r,s);if(e&&i!=i){for(;s>a;)if((n=o[a++])!=n)return!0}else for(;s>a;a++)if((e||a in o)&&o[a]===i)return e||a||0;return!e&&-1}},Qt={includes:Kt(!0),indexOf:Kt(!1)},zt={},Yt=W,qt=R,Xt=Qt.indexOf,$t=zt,Zt=c([].push),ei=function(e,t){var i,r=qt(e),n=0,o=[];for(i in r)!Yt($t,i)&&Yt(r,i)&&Zt(o,i);for(;t.length>n;)Yt(r,i=t[n++])&&(~Xt(o,i)||Zt(o,i));return o},ti=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],ii=ei,ri=ti,ni=Object.keys||function(e){return ii(e,ri)},oi=ke,si=De,ai=we,ci=Ae,li=R,ui=ni;be.f=oi&&!si?Object.defineProperties:function(e,t){ci(e);for(var i,r=li(t),n=ui(t),o=n.length,s=0;o>s;)ai.f(e,i=n[s++],r[i]);return e};var di,hi=je("document","documentElement"),pi=z,mi=b("keys"),_i=function(e){return mi[e]||(mi[e]=pi(e))},fi=Ae,gi=be,Ti=ti,vi=zt,Si=hi,yi=Me,Ei="prototype",Ii="script",Ri=_i("IE_PROTO"),Ci=function(){},Ai=function(e){return"