Compare commits
7 Commits
Author | SHA1 | Date |
---|---|---|
Snek | 566f1ea389 | |
Snek | d70fa04a8c | |
Snek | 3fa7f452a0 | |
Snek | dae0f751e7 | |
Snek | 4c47de1ad5 | |
Snek | da0089ae1a | |
Snek | 430bccd4cf |
|
@ -0,0 +1 @@
|
|||
/build
|
|
@ -0,0 +1,24 @@
|
|||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 25
|
||||
buildToolsVersion '25.0.2'
|
||||
defaultConfig {
|
||||
applicationId "solidsnek.amadeus_fork"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 25
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile fileTree(include: ['*.jar'], dir: 'libs')
|
||||
compile 'com.android.support:appcompat-v7:25.2.0'
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in D:\Soft\AndroidSDK/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the proguardFiles
|
||||
# directive in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
|
@ -1,6 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.example.yink.amadeus">
|
||||
package="solidsnek.amadeus_fork">
|
||||
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
|
@ -13,7 +15,8 @@
|
|||
<action android:name="android.intent.action.MAIN" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name=".LaunchActivity">
|
||||
<activity android:name=".LaunchActivity"
|
||||
android:screenOrientation="portrait">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
|
|
|
@ -1,168 +0,0 @@
|
|||
package com.example.yink.amadeus;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.graphics.drawable.AnimationDrawable;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.speech.tts.UtteranceProgressListener;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Random;
|
||||
|
||||
|
||||
|
||||
public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener{
|
||||
String TAG = "Amadeus";
|
||||
TextToSpeech tts;
|
||||
ImageView kurisu;
|
||||
AnimationDrawable animation;
|
||||
HashMap<String, String> map;
|
||||
private final int eyes_closed = 0;
|
||||
private final int normal = 1;
|
||||
private final int sad = 2;
|
||||
private final int indifferent = 3;
|
||||
private final int wink = 4;
|
||||
private final int pissed = 5;
|
||||
private final int annoyed = 6;
|
||||
private final int disappointed = 7;
|
||||
private final int happy = 8;
|
||||
private final int angry = 9;
|
||||
private final int blush = 10;
|
||||
private final int side = 11;
|
||||
|
||||
ArrayList<VoiceLine> voiceLines = new ArrayList<>();
|
||||
|
||||
|
||||
@Override
|
||||
public void onWindowFocusChanged(boolean hasFocus){
|
||||
if(hasFocus)
|
||||
speak(new VoiceLine("Hallo.",happy));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
kurisu = (ImageView) findViewById(R.id.imageView_kurisu);
|
||||
setupLines();
|
||||
map = new HashMap<String, String>();
|
||||
tts = new TextToSpeech(this, this);
|
||||
kurisu.setImageResource(R.drawable.kurisu_1);
|
||||
animation = (AnimationDrawable) kurisu.getDrawable();
|
||||
kurisu.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Random randomgen = new Random();
|
||||
speak(voiceLines.get(randomgen.nextInt(voiceLines.size())));
|
||||
}});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInit(int status) {
|
||||
if(status==TextToSpeech.SUCCESS){
|
||||
tts.setLanguage(Locale.JAPAN);
|
||||
tts.setPitch(1.05f);
|
||||
tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
|
||||
@Override
|
||||
public void onStart(String s) {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
animation.start();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDone(String s) {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
animation.stop();
|
||||
kurisu.setImageDrawable(animation.getFrame(0));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String s) {
|
||||
animation.stop();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void speak(VoiceLine line){
|
||||
switch (line.getState()){
|
||||
case eyes_closed:
|
||||
kurisu.setImageResource(R.drawable.kurisu_1);
|
||||
break;
|
||||
case normal:
|
||||
kurisu.setImageResource(R.drawable.kurisu_2);
|
||||
break;
|
||||
case sad:
|
||||
kurisu.setImageResource(R.drawable.kurisu_3);
|
||||
break;
|
||||
case indifferent:
|
||||
kurisu.setImageResource(R.drawable.kurisu_4);
|
||||
break;
|
||||
case wink:
|
||||
kurisu.setImageResource(R.drawable.kurisu_5);
|
||||
break;
|
||||
case pissed:
|
||||
kurisu.setImageResource(R.drawable.kurisu_6);
|
||||
break;
|
||||
case annoyed:
|
||||
kurisu.setImageResource(R.drawable.kurisu_7);
|
||||
break;
|
||||
case disappointed:
|
||||
kurisu.setImageResource(R.drawable.kurisu_8);
|
||||
break;
|
||||
case happy:
|
||||
tts.setPitch(1.5f);
|
||||
kurisu.setImageResource(R.drawable.kurisu_9);
|
||||
break;
|
||||
case angry:
|
||||
kurisu.setImageResource(R.drawable.kurisu_10);
|
||||
break;
|
||||
case blush:
|
||||
tts.setPitch(1.5f);
|
||||
tts.setSpeechRate(1.3f);
|
||||
kurisu.setImageResource(R.drawable.kurisu_11);
|
||||
break;
|
||||
case side:
|
||||
kurisu.setImageResource(R.drawable.kurisu_12);
|
||||
break;
|
||||
default:kurisu.setImageResource(R.drawable.kurisu_2);
|
||||
|
||||
}
|
||||
animation = (AnimationDrawable) kurisu.getDrawable();
|
||||
map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"UniqueID");
|
||||
tts.speak(line.getText(),TextToSpeech.QUEUE_FLUSH,map);
|
||||
tts.setPitch(1.05f);
|
||||
tts.setSpeechRate(1.0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy(){
|
||||
tts.shutdown();
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
protected void setupLines(){
|
||||
voiceLines.add(new VoiceLine("Konban wa, Okabe. Okaeri!",happy));
|
||||
voiceLines.add(new VoiceLine("Okabe, sabishi des!",sad));
|
||||
voiceLines.add(new VoiceLine("Tsumaranai",indifferent));
|
||||
voiceLines.add(new VoiceLine("Okabe ga ski",blush));
|
||||
voiceLines.add(new VoiceLine("Chigau",angry));
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
package com.example.yink.amadeus;
|
||||
|
||||
/**
|
||||
* Created by Yink on 28.02.2017.
|
||||
*/
|
||||
|
||||
public class VoiceLine {
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public int getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
final private String text;
|
||||
final private int state;
|
||||
|
||||
public VoiceLine(String text, int state){
|
||||
this.text = text;
|
||||
this.state = state;
|
||||
}
|
||||
}
|
|
@ -1,33 +1,53 @@
|
|||
package com.example.yink.amadeus;
|
||||
package solidsnek.amadeus_fork;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
public class LaunchActivity extends AppCompatActivity {
|
||||
ImageView connect;
|
||||
ImageView connect, cancel;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.activity_launch);
|
||||
connect = (ImageView) findViewById(R.id.imageView_connect);
|
||||
cancel = (ImageView) findViewById(R.id.imageView_cancel);
|
||||
|
||||
connect.setImageResource(R.drawable.connect_unselect);
|
||||
cancel.setImageResource(R.drawable.cancel_unselect);
|
||||
|
||||
connect.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
connect.setImageResource(R.drawable.connect_select);
|
||||
|
||||
Intent intent = new Intent(LaunchActivity.this,MainActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
cancel.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
cancel.setImageResource(R.drawable.cancel_select);
|
||||
|
||||
Intent intent = new Intent(Intent.ACTION_MAIN);
|
||||
intent.addCategory(Intent.CATEGORY_HOME);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume(){
|
||||
connect.setImageResource(R.drawable.connect_unselect);
|
||||
cancel.setImageResource(R.drawable.cancel_unselect);
|
||||
super.onResume();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,198 @@
|
|||
package solidsnek.amadeus_fork;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.drawable.AnimationDrawable;
|
||||
import android.media.MediaPlayer;
|
||||
import android.speech.RecognitionListener;
|
||||
import android.speech.SpeechRecognizer;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.speech.RecognizerIntent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class MainActivity extends AppCompatActivity {
|
||||
|
||||
String TAG = "Amadeus";
|
||||
ImageView kurisu;
|
||||
AnimationDrawable animation;
|
||||
|
||||
/* Mood constants. Less cpu cycles - a little bit more memory consumption */
|
||||
private class Mood {
|
||||
public static final int HAPPY = R.drawable.kurisu_9;
|
||||
public static final int PISSED = R.drawable.kurisu_6;
|
||||
public static final int ANNOYED = R.drawable.kurisu_7;
|
||||
public static final int ANGRY = R.drawable.kurisu_10;
|
||||
public static final int BLUSH = R.drawable.kurisu_11;
|
||||
public static final int SIDE = R.drawable.kurisu_12;
|
||||
public static final int SAD = R.drawable.kurisu_3;
|
||||
public static final int NORMAL = R.drawable.kurisu_2;
|
||||
public static final int SLEEPY = R.drawable.kurisu_1;
|
||||
public static final int WINKING = R.drawable.kurisu_5;
|
||||
public static final int DISAPPOINTED = R.drawable.kurisu_8;
|
||||
public static final int INDIFFERENT = R.drawable.kurisu_4;
|
||||
public static final int SIDED_PLEASANT = R.drawable.kurisu_15;
|
||||
public static final int SIDED_WORRIED = R.drawable.kurisu_17;
|
||||
}
|
||||
|
||||
/* Don't forget about permission to use audio! */
|
||||
private SpeechRecognizer sr;
|
||||
|
||||
@Override
|
||||
public void onWindowFocusChanged(boolean hasFocus) {
|
||||
if (hasFocus) {
|
||||
speak(R.raw.haro, Mood.SIDED_PLEASANT);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
kurisu = (ImageView) findViewById(R.id.imageView_kurisu);
|
||||
animation = (AnimationDrawable) kurisu.getDrawable();
|
||||
|
||||
sr = SpeechRecognizer.createSpeechRecognizer(this);
|
||||
sr.setRecognitionListener(new listener());
|
||||
|
||||
kurisu.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
MainActivity host = (MainActivity) view.getContext();
|
||||
|
||||
int permissionCheck = ContextCompat.checkSelfPermission(host,
|
||||
Manifest.permission.RECORD_AUDIO);
|
||||
|
||||
if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
|
||||
promptSpeechInput();
|
||||
} else {
|
||||
speak(R.raw.daga_kotowaru, Mood.PISSED);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
if (sr != null)
|
||||
sr.destroy();
|
||||
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
private void promptSpeechInput() {
|
||||
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
|
||||
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
|
||||
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
|
||||
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ja-JP");
|
||||
|
||||
sr.startListening(intent);
|
||||
}
|
||||
|
||||
public void speak(int raw, int mood) {
|
||||
try {
|
||||
MediaPlayer m = MediaPlayer.create(getApplicationContext(), raw);
|
||||
|
||||
kurisu.setImageResource(mood);
|
||||
|
||||
animation = (AnimationDrawable) kurisu.getDrawable();
|
||||
|
||||
if (m.isPlaying()) {
|
||||
m.stop();
|
||||
m.release();
|
||||
m = new MediaPlayer();
|
||||
}
|
||||
|
||||
m.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
|
||||
@Override
|
||||
public void onPrepared(MediaPlayer mp) {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
animation.start();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
m.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
|
||||
@Override
|
||||
public void onCompletion(MediaPlayer mp) {
|
||||
mp.release();
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
animation.stop();
|
||||
kurisu.setImageDrawable(animation.getFrame(0));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
m.start();
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private class listener implements RecognitionListener {
|
||||
public void onReadyForSpeech(Bundle params) {
|
||||
Log.d(TAG, "onReadyForSpeech");
|
||||
}
|
||||
public void onBeginningOfSpeech() {
|
||||
Log.d(TAG, "onBeginningOfSpeech");
|
||||
}
|
||||
public void onRmsChanged(float rmsdB) {
|
||||
Log.d(TAG, "onRmsChanged");
|
||||
}
|
||||
public void onBufferReceived(byte[] buffer) {
|
||||
Log.d(TAG, "onBufferReceived");
|
||||
}
|
||||
public void onEndOfSpeech() {
|
||||
Log.d(TAG, "onEndofSpeech");
|
||||
}
|
||||
public void onError(int error) {
|
||||
Log.d(TAG, "error " + error);
|
||||
}
|
||||
public void onResults(Bundle results) {
|
||||
String str = "";
|
||||
Log.d(TAG, "onResults " + results);
|
||||
ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
|
||||
str += data.get(0);
|
||||
|
||||
String[] greetingArr = new String[]{"ハロー", "おはよう", "こんにちは", "こんばんは"};
|
||||
List<String> greeting = Arrays.asList(greetingArr);
|
||||
|
||||
/*
|
||||
* TODO: Probably not good idea to use bunch of else-if statements
|
||||
*/
|
||||
if (greeting.contains(str)) {
|
||||
speak(R.raw.haro, Mood.HAPPY);
|
||||
} else if (str.equals("クリス")) {
|
||||
speak(R.raw.hai, Mood.NORMAL);
|
||||
} else {
|
||||
/*
|
||||
* If voice input data doesn't match any preset
|
||||
*/
|
||||
speak(R.raw.senpai, Mood.SIDED_WORRIED);
|
||||
}
|
||||
}
|
||||
public void onPartialResults(Bundle partialResults) {
|
||||
Log.d(TAG, "onPartialResults");
|
||||
}
|
||||
public void onEvent(int eventType, Bundle params) {
|
||||
Log.d(TAG, "onEvent " + eventType);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 272 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 272 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 272 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 270 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 270 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 270 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 270 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 245 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 489 KiB After Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 489 KiB After Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 489 KiB After Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 490 KiB After Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 490 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 490 KiB After Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 489 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 489 KiB After Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 489 KiB After Width: | Height: | Size: 111 KiB |
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 473 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 474 KiB After Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 474 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 471 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 472 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 471 KiB After Width: | Height: | Size: 118 KiB |
Before Width: | Height: | Size: 471 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 471 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 470 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 470 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 470 KiB After Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 487 KiB After Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 487 KiB After Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 487 KiB After Width: | Height: | Size: 112 KiB |