Commit Graph

204 Commits

Author SHA1 Message Date
Jonah Williams
978fada33c
Refactor flutter.gradle to use assemble directly (#43876)
Removes multiple re-entrant calls of bundle and aot and replaces them with a single call to assemble. This restores full caching and will allow follow-up performance improvements when building multiple ABIs
2019-11-08 12:41:24 -08:00
xster
604f176194 Add more flutter build ios-framework tests before the impending jonahpocalypse (#44308) 2019-11-07 13:12:56 -08:00
xster
d2e87a5d2c
Build ios framework (#44065) 2019-11-06 14:54:15 -08:00
xster
cf95cd4394
Add v1 plugin register function into v2 plugin template (#44166) 2019-11-05 20:03:50 -08:00
Christopher Fujino
261594e785
add libzip cache artifact (#43677) 2019-10-29 14:29:00 -07:00
Emmanuel Garcia
30493a35b6
Test Gradle on Windows (#42709) 2019-10-21 16:42:46 -07:00
Emmanuel Garcia
1d2eaaf204
Ensure that flutter assets are copied in the AAR (#42306) 2019-10-09 16:29:20 -07:00
Jonah Williams
f25812bae5
Revert "replace package:vm_service_client with package:vm_service in the devicelab project (#41646)" (#41960) 2019-10-03 21:30:37 -07:00
Devon Carew
4de496a4e5 replace package:vm_service_client with package:vm_service in the devicelab project (#41646) 2019-10-03 20:43:34 -07:00
liyuqian
9cc29c61df
Reland "Measure iOS CPU/GPU percentage #41426" (#41578)
This reverts commit baea9bf7cc.

Additionally,   we let the test run on mac8 with iphonexs because the test won't run on Xcode 10.1 (mac3-7). Hence we force it to run on mac8 which currently has Xcode 10.2.
2019-09-29 11:33:43 -07:00
liyuqian
baea9bf7cc
Revert "Reland "Measure iOS CPU/GPU percentage (#41234)" (#41426)" (#41575)
This reverts commit 67b5bdf99b.

Reason: it broke device lab.

TBR: @goderbauer
2019-09-29 10:58:13 -07:00
liyuqian
67b5bdf99b
Reland "Measure iOS CPU/GPU percentage (#41234)" (#41426)
This reverts commit f1e7fe8142.

This fix is in https://github.com/flutter/packages/pull/39
2019-09-28 14:24:46 -07:00
Jonah Williams
f1e7fe8142
Revert "Reland "Measure iOS CPU/GPU percentage (#39439)" (#41234)" (#41400) 2019-09-26 12:27:01 -07:00
liyuqian
406b44983a
Reland "Measure iOS CPU/GPU percentage (#39439)" (#41234)
This reverts commit 652be88ecd.

This fix is in https://github.com/flutter/packages/pull/37
2019-09-26 10:39:24 -07:00
Jonah Williams
9bd02a1787
Re-Re-Re-land implement flutter build bundle with assemble (#41302) 2019-09-25 13:55:29 -07:00
Emmanuel Garcia
c81c78f828
Test that flutter assets are contained in the APK (#41254) 2019-09-25 11:07:17 -07:00
Jonah Williams
cc3ca9a916
Revert "Re-Re-land Implement flutter build bundle with assemble (#41230)" (#41295) 2019-09-25 10:57:58 -04:00
Jonah Williams
84a476a4db
Re-Re-land Implement flutter build bundle with assemble (#41230) 2019-09-25 10:17:04 -04:00
Jonah Williams
f8ba6756c3
Revert "Reland: implement build bundle with assemble (#40470)" (#40862) 2019-09-19 09:04:07 -07:00
Jonah Williams
ea7876ae82
Reland: implement build bundle with assemble (#40470) 2019-09-19 07:46:50 -07:00
Alexandre Ardhuin
df4bf453ab
more UI-as-code (#35516) 2019-09-17 16:23:44 +02:00
liyuqian
652be88ecd
Revert "Measure iOS CPU/GPU percentage (#39439)" (#40624)
This reverts commit af9f424d5d.

Reverts flutter/flutter#39439

Reason: this passed the local device lab test on my Macbook but it failed in the actual device lab. Will investigate, fix, and reland.

TBR: @dnfield @goderbauer @tvolkert @Hixie
2019-09-16 15:00:27 -07:00
liyuqian
af9f424d5d
Measure iOS CPU/GPU percentage (#39439)
For https://github.com/flutter/flutter/issues/33899

Test added:
- simple_animation_perf_ios

Test modified:
- backdrop_filter_perf_ios__timeline_summary

We'll add the CPU/GPU measurement to more iOS tests
once it's proven to be non-flaky.
2019-09-16 13:14:38 -07:00
Jonah Williams
609a78fdca
Revert "build bundle with assemble (#37508)" (#40204) 2019-09-10 20:03:52 -07:00
Jonah Williams
a7aff56741
build bundle with assemble (#37508) 2019-09-10 19:28:38 -07:00
Todd Volkert
d02a3fe661
Lower the iterations on flutter_gallery__back_button_memory (#40102)
It was hitting the global devicelab 15 minute timeout.
2019-09-09 13:13:05 -07:00
Christopher Fujino
413475acd6
Revert "Revert "fix recursiveCopy to preserve executable bit (#39505)" (#39588)" (#39594)
This reverts commit 61eab16c37.
2019-08-30 16:56:13 -07:00
Christopher Fujino
61eab16c37
Revert "fix recursiveCopy to preserve executable bit (#39505)" (#39588)
This reverts commit 8ec2c5828d.
2019-08-30 15:03:12 -07:00
Christopher Fujino
8ec2c5828d
fix recursiveCopy to preserve executable bit (#39505) 2019-08-30 14:13:36 -07:00
Jonah Williams
d2f70a6d20
kill leaked chrome processes (#39514) 2019-08-29 14:28:37 -07:00
Christopher Fujino
65f8f9c0b8
add --exit and --match-host-platform defaults to devicelab runner (#37832) 2019-08-20 14:37:42 -07:00
Emmanuel Garcia
c08a3c7a0a
Add metadata to indicate if the host app contains a Flutter module (#37731) 2019-08-06 22:38:09 -07:00
Emmanuel Garcia
bd02e4f573
Test that modules built as AAR contain the right assets and artifacts (#37206) 2019-07-30 13:38:06 -07:00
Jason Simmons
a3a350df1c
devicelab: replace the FLUTTER_ENGINE environment variable with the new local engine flags (#36969) 2019-07-26 10:06:56 -07:00
Emmanuel Garcia
242a4225a1
Flutter build aar (#36732)
`flutter build aar`

This new build command works just like `flutter build apk` or `flutter build appbundle`, but for plugin and module projects.

This PR also refactors how plugins are included in app or module projects. By building the plugins as AARs, the Android Gradle plugin is able to use Jetifier to translate support libraries into AndroidX libraries for all the plugin's native code. Thus, reducing the error rate when using AndroidX in apps.

This change also allows to build modules as AARs, so developers can take these artifacts and distribute them along with the native host app without the need of the Flutter tool. This is a requirement for add to app.

`flutter build aar` generates POM artifacts (XML files) which contain metadata about the native dependencies used by the plugin. This allows Gradle to resolve dependencies at the app level. The result of this new build command is a single build/outputs/repo, the local repository that contains all the generated AARs and POM files.

In a Flutter app project, this local repo is used by the Flutter Gradle plugin to resolve the plugin dependencies. In add to app case, the developer needs to configure the local repo and the dependency manually in `build.gradle`:


repositories {
    maven {
        url "<path-to-flutter-module>build/host/outputs/repo"
    }
}

dependencies {
    implementation("<package-name>:flutter_<build-mode>:1.0@aar") {
       transitive = true
    }
}
2019-07-23 09:27:42 -07:00
Emmanuel Garcia
c9b466f9e2
Revert "Add flutter build aar (#35217)" (#36731)
This reverts commit 11460b8378.
2019-07-22 22:07:59 -07:00
Emmanuel Garcia
11460b8378
Add flutter build aar (#35217)
`flutter build aar`

This new build command works just like `flutter build apk` or `flutter build appbundle`, but for plugin and module projects.

This PR also refactors how plugins are included in app or module projects. By building the plugins as AARs, the Android Gradle plugin is able to use Jetifier to translate support libraries into AndroidX libraries for all the plugin's native code. Thus, reducing the error rate when using AndroidX in apps.

This change also allows to build modules as AARs, so developers can take these artifacts and distribute them along with the native host app without the need of the Flutter tool. This is a requirement for add to app.

`flutter build aar` generates POM artifacts (XML files) which contain metadata about the native dependencies used by the plugin. This allows Gradle to resolve dependencies at the app level. The result of this new build command is a single build/outputs/repo, the local repository that contains all the generated AARs and POM files.

In a Flutter app project, this local repo is used by the Flutter Gradle plugin to resolve the plugin dependencies. In add to app case, the developer needs to configure the local repo and the dependency manually in `build.gradle`:


repositories {
    maven {
        url "<path-to-flutter-module>build/host/outputs/repo"
    }
}

dependencies {
    implementation("<package-name>:flutter_<build-mode>:1.0@aar") {
       transitive = true
    }
}
2019-07-22 20:46:01 -07:00
Ian Hickson
295530dcaf
Some minor cleanup in devicelab (#36571) 2019-07-22 14:13:33 -07:00
Christopher Fujino
102ab1e6d9
Reland bundle ios deps (#36093)
This updates the flutter tool cache to download binary files for ideviceinstaller, ios-deploy, libimobiledevice, and dynamically linked dependencies from Flutter's GCP bucket.
2019-07-15 09:22:29 -07:00
Alexandre Ardhuin
758009ba70
more ui-as-code (#35393)
* more ui-as-code

* address review comments
2019-07-02 21:11:56 +02:00
Alexandre Ardhuin
919dcf53f3
enable lints prefer_spread_collections and prefer_inlined_adds (#35189) 2019-06-27 21:23:16 +02:00
Josh Burton
577c2fc48c Ensures flutter jar is added to all build types on plugin projects (#34573) 2019-06-25 10:40:55 -07:00
Emmanuel Garcia
c50fa3d2bd Re-land config lib dependencies for flavors (#34668) 2019-06-18 22:37:42 -07:00
Emmanuel Garcia
9dbc66979a
Revert "Config lib dependencies when using flavors (#34592)" (#34655)
This reverts commit 358b9bd381.
2019-06-18 15:30:59 -07:00
Emmanuel Garcia
358b9bd381
Config lib dependencies when using flavors (#34592) 2019-06-17 15:05:16 -07:00
Emmanuel Garcia
21a532698f
Split gradle_plugin_test.dart (#34282)
Fixes timeout when running gradle_plugin_test
2019-06-11 16:24:03 -07:00
Dan Field
bc3ca10e71
Make it easier to pass local engine flags when running devicelab tests (#34054) 2019-06-07 12:49:09 -07:00
Alexandre Ardhuin
4fa32df141
use null aware operators (#32711)
* use null aware operators

* rollback changes about null-aware operator

* disable lint prefer_is_not_empty
2019-05-16 22:25:51 +02:00
Ben Konyi
1459b1e91f
Fixed failing tests caused by introduction of authentication codes (#31315) 2019-04-19 11:45:53 -07:00
Ben Konyi
3764cb8515
Added support for authentication codes for the VM service. (#30857)
* Added support for authentication codes for the VM service.

Previously, a valid web socket connection would use the following URI:

`ws://127.0.0.1/ws`

Now, by default, the VM service requires a connection to be made with a
URI similar to the following:

`ws://127.0.0.1:8181/Ug_U0QVsqFs=/ws`

where `Ug_U0QVsqFs` is an authentication code generated and shared by
the
service.

This behavior can be disabled with the `--disable-service-auth-codes`
flag.
2019-04-18 21:01:50 -07:00
liyuqian
b0937a1e89
Fix the warning test by checking stderr (#30997)
Previously, I used the Android emulator for testing and everything
seemed to work fine with stdout (if I remember correctly). But our
devicelab uses real Android devices and the warnings are routed to
stderr. Hence change stdout to stderr in the test.
2019-04-15 10:19:36 -07:00
Jonah Williams
b4edfb1511
Revert "Manual engine roll with disabled service authentication codes (#30919)" (#30930)
This reverts commit 19d6e7b613.
2019-04-11 12:18:39 -07:00
Ben Konyi
19d6e7b613
Manual engine roll with disabled service authentication codes (#30919) 2019-04-11 12:08:13 -07:00
Dan Field
820b0e029e
Avoid overwriting task result for non-leak checkers (#29989) 2019-03-26 11:40:05 -07:00
Dan Field
ecfdd7e1ea
Detect and cleanup leaky processes (#29196)
* Detect and cleanup leaky processes
* Add flaky tests for detecting leaked processes
2019-03-22 14:32:36 -07:00
Alexandre Ardhuin
387f885481
Add missing trailing commas (#28673)
* add trailing commas on list/map/parameters

* add trailing commas on Invocation with nb of arg>1

* add commas for widget containing widgets

* add trailing commas if instantiation contains trailing comma

* revert bad change
2019-03-01 08:17:55 +01:00
Dan Field
3ce0c27fd9
Make logcat less chatty on perf tests (#28272) 2019-02-21 10:59:20 -08:00
Danny Tuppeny
c19142d8b7
Support ANDROID_SDK_ROOT in addition to ANDROID_HOME (#25221)
* Fall back to ANDROID_SDK_ROOT if ANDROID_HOME is not set

And update descriptions to use the non-deprecated ANDROID_SDK_ROOT.

Fixes #15114.

* Remove trailing whitespace

* Update dev/devicelab/lib/framework/adb.dart

Co-Authored-By: DanTup <danny@tuppeny.com>

* Reformat long line
2018-12-17 17:29:09 +00:00
Alexandre Ardhuin
344ebe02ff
avoid returning null for Future (#23784) 2018-11-05 16:38:23 +01:00
Alexandre Ardhuin
8b0de38ef8
fix upcoming lint avoid_returning_null_for_void (#23190) 2018-10-17 11:01:37 +02:00
Greg Spencer
9f23866a0a
Rename module --> application in flutter create command. (#22565)
This renames the "module" template to the "application" template, and makes "application" the default. The existing "app" template is now deprecated.

flutter create also now recognizes the type of project in an existing directory, and is able to recreate it without having the template type explicitly specified (although you can still do that). It does this now by first looking in the .metadata file for the new project_type field, and if it doesn't find that, then it looks at the directory structure. Also, the .metadata file is now overwritten even on an existing directory so that 1) the project_type can be added to legacy projects, and 2) the version of Flutter that updated the project last is updated.

I also cleaned up a bunch of things in create_test.dart, added many more tests, and added an example test to the test/ directory in the generated output of the application template.

Fixes #22530
Fixes #22344
2018-10-04 13:03:20 -07:00
Alexandre Ardhuin
d340e2f229
apply lint prefer_void_to_null in dev/ (#22661) 2018-10-04 18:44:23 +02:00
Alexandre Ardhuin
2ea1d81cdc
sort_constructors_first (#22575) 2018-10-04 07:28:07 +02:00
Alexandre Ardhuin
5de96bb734
unnecessary this in field initializers (#22522) 2018-10-02 17:14:59 +02:00
Alexandre Ardhuin
f62afdcf57
add missing type parameter on methods (#22096) 2018-10-01 21:29:08 +02:00
Alexandre Ardhuin
a07d3719a1
enable lint prefer_generic_function_type_aliases (#21680) 2018-09-14 21:06:19 +02:00
Alexandre Ardhuin
d927c93310
Unnecessary new (#20138)
* enable lint unnecessary_new

* fix tests

* fix tests

* fix tests
2018-09-12 08:29:29 +02:00
Ian Hickson
1c2d3f324d
Shut down gradle at the end of each task (#20968)
Apparently Gradle leaks memory and it's causing failures.
2018-08-28 11:28:25 -07:00
Ian Hickson
22f376418f
Track number of package dependencies in Flutter (#20831)
* Track number of package dependencies in Flutter

Relands #20774.

* Use evalFlutter instead of startProcess.

That way we don't need `flutter` on the PATH.
2018-08-21 14:02:33 -07:00
Ian Hickson
b7261586e5
Audit TODO syntax (#20837)
Fixes the pattern for some TODOs to match our style guide.

(Also, a couple of minor code order fixes.)
2018-08-21 14:02:11 -07:00
Ian Hickson
1993a67381
Performance test cleanup (#20652)
* Fix TODO syntax.
* Clarify messages for some timeouts, to aid debugging.
* Increase some other timeouts that were a needlessly short, to reduce sources of flakes.
* Remove some more timeouts that were mostly redundant, to remove complexity.
* Minor style cleanup.
* Remove some dangerous traps (specifically, hide the explicit start/end times in TimedEvent since they shouldn't matter).
2018-08-17 13:19:28 -07:00
Ian Hickson
3dec6a6930
Clean up usage of temporary directories (#20682)
All temporary directory start with `flutter_` and have their random component separated from the name by a period, as in `flutter_test_bundle.YFYQMY`.

I've tried to find some of the places where we didn't cleanly delete temporary directories, too. This greatly reduces, though it does not entirely eliminate, the directories we leave behind when running tests, especially `flutter_tools` tests.

While I was at it I standardized on `tempDir` as the variable name for temporary directories, since it was the most common, removing occurrences of `temp` and `tmp`, among others.

Also I factored out some common code that used to catch exceptions that happen on Windows, and made more places use that pattern.
2018-08-17 13:17:23 -07:00
Ian Hickson
872e88cec7
Reduce noise on the memory benchmarks (#19630) (#20163)
- Check memory usage in release builds, not profile.
- Use multiple runs and average the results.
2018-08-06 12:46:51 -07:00
Ian Hickson
a2ca14d71e
Revert "Reduce noise on the memory benchmarks" (#20158)
* Revert "Add pub cache, artifacts, pkgs to Cirrus cache (#20080)"

This reverts commit 07e93b385c.

* Revert "Reduce noise on the memory benchmarks (#19630)"

This reverts commit 8eb5cb7dc0.
2018-08-02 13:56:44 -07:00
Ian Hickson
8eb5cb7dc0
Reduce noise on the memory benchmarks (#19630)
- Check memory usage in release builds, not profile.
- Use multiple runs and average the results.
2018-08-02 12:22:15 -07:00
Alexandre Ardhuin
eda03e2586
re-re-enable lint unnecessary_const (#20103) 2018-08-02 12:02:32 +02:00
Todd Volkert
00aac68e2d
Revert flutter/flutter#19592 (#19861)
It was causing problems rolling Flutter into Fuchsia
2018-07-27 08:44:39 -07:00
Alexandre Ardhuin
27018359d2
re-enable lint unnecessary_const (#19592)
* re-enable lint unnecessary_const

* remove trailling whitespaces

* remove unnecessary const (after merge)
2018-07-23 08:31:48 +02:00
Leaf Petersen
32f94443cc
Remove uses of deprecated constants and change int.parse to int.tryParse (#19575)
* Remove uses of deprecated constants
* Change int.parse to int.tryParse where appropriate
2018-07-20 15:07:24 -07:00
Ian Hickson
f630f90d6d
Revert "enable lint unnecessary_const (#19342)" (#19423)
This reverts commit cc1cf13eec.
2018-07-16 13:30:27 -07:00
Alexandre Ardhuin
cc1cf13eec
enable lint unnecessary_const (#19342) 2018-07-16 21:43:48 +02:00
Alexander Aprelev
7ebf2728dc
Revert "Revert "Roll engine to fed2ea458ed49088d33eddabc546ba56d600c717 (includes dart roll) again (#19277)" (#19295)" (#19322)
This reverts commit cc122f1672.
2018-07-12 14:59:22 -07:00
Alexander Aprelev
cc122f1672
Revert "Roll engine to fed2ea458ed49088d33eddabc546ba56d600c717 (includes dart roll) again (#19277)" (#19295)
This reverts commit 700cb767c9 as it
breaks Windows tests.
2018-07-11 19:52:28 -07:00
Alexander Aprelev
700cb767c9
Roll engine to fed2ea458ed49088d33eddabc546ba56d600c717 (includes dart roll) again (#19277)
* Revert "Revert "Roll engine to fed2ea458ed49088d33eddabc546ba56d600c717 (includes dart roll) (#19044)" (#19276)"

This reverts commit cf932490b7 as it also
includes fix for type error that broke tests.

* Add type cast for dart2 type checks.

* Move up to latest goldens

* Make inDirectory() type-parameterized.

* Add typecasting to transitions_perf_test.dart and microbenchmarks.

* Add boolean flag initialization in save_catalog_screenshots.dart

* Add type conversion to gallery transition test
2018-07-11 19:26:33 -07:00
Alexander Aprelev
cf932490b7
Revert "Roll engine to fed2ea458ed49088d33eddabc546ba56d600c717 (includes dart roll) (#19044)" (#19276)
This reverts commit f4a038da63 as it breaks microbenchmark tests.
2018-07-11 12:48:55 -07:00
Alexander Aprelev
f4a038da63
Roll engine to fed2ea458ed49088d33eddabc546ba56d600c717 (includes dart roll) (#19044)
* Roll engine to rolled dart
Add connectionTimeout property to class that extends HttpOverrides.
Upgrade packages.
Add more type fixes.
Update goldens hash.
Add more type fixes.
Upgrade packages.
Fix tests.
Remove strong-mode from analysis options yaml file.
Increase dev/devicelab timeout from 2 to 10 seconds.
Added getVM to waitForViews. Fix type errors in compileExpression.

* Pick up engine revision with fix for microbenchmarks regression.
Increase default timeout from 20/30 to 60s.
2018-07-11 12:13:28 -07:00
Ian Hickson
35ad2a786d
Remove race conditions involving finding available ports (#18698)
This is an attempt to reland #18488 with less breakage on macOS.
2018-06-27 16:44:28 -07:00
Mikkel Nygaard Ravn
5e54b9e0fd
Find Java for gradlew executions (#18821) 2018-06-26 10:10:43 +02:00
Florian Loitsch
d248725e15
Flutter attach (#18677)
Add `flutter attach` command.

This command allows Flutter to connect to applications that haven't been launched using `flutter run`.
2018-06-25 15:33:42 +02:00
Ian Hickson
0fa5ba43a1
Revert "Remove race conditions involving finding available ports (#18488)" (#18521)
This reverts commit 7750872251.
2018-06-15 15:37:20 -07:00
Ian Hickson
7750872251
Remove race conditions involving finding available ports (#18488) 2018-06-15 14:16:18 -07:00
Ian Hickson
d1cc8b6de8
Clean up output of "flutter run --release" (#18380)
(second attempt)
2018-06-14 12:30:20 -07:00
Chris Bracken
2ae48845a8
Revert elimination of Dart 1 (#18460)
fuchsia_tester.dart still assumes Dart 1. Previously, it ran tests directly
from source, flutter_platform.dart automatically runs a kernel compile when
operating in Dart 2 mode, but this assumes a functional Dart SDK is available
in the artifacts directly, and fuchsia_tester.dart mocks out the artifacts
directory with an empty temp dir.

Remaining work is:
1. Get the frontend server building as a dependency on Fuchsia.
2. Patch fuchsia_tester.dart to use a valid Dart SDK and frontend server.

This also reverts migration to Dart 2 typedef syntax.

This reverts commit 6c56bb2. (#18362)
This reverts commit 3daebd0. (#18316)
2018-06-13 12:46:39 -07:00
Greg Spencer
6c56bb2420
Update typedef syntax to use Function notation and turn on lint for old notation. (#18362)
Now that Dart 1 is turned off, reapplying my change to turn on the prefer_generic_function_type_aliases analysis option, and fix all the typedefs to Dart 2 preferred syntax.

Also eliminated the unused analysis_options_repo.yaml file and turned on public_member_api_docs in analysys_options.yaml.

No logic changes, just changing the typedef syntax for all typedefs, and updating analysis options.
2018-06-11 15:51:45 -07:00
Alexandre Ardhuin
09276bea25
enable lint prefer_equal_for_default_values (#18156) 2018-06-05 08:50:40 +02:00
Ian Hickson
944f0a4cc1
Revert "Clean up output of "flutter run --release" (#18049)" (#18184)
This reverts commit 4f1b66044c.
2018-06-04 16:17:08 -07:00
Ian Hickson
4f1b66044c
Clean up output of "flutter run --release" (#18049) 2018-06-04 15:22:51 -07:00
Greg Spencer
b921fdc58e
Revert "Update typedef syntax to use Function notation and turn on lint for old notation. (#18035)" (#18041)
This reverts commit 3258602073.
2018-05-30 13:51:14 -07:00
Greg Spencer
3258602073
Update typedef syntax to use Function notation and turn on lint for old notation. (#18035)
Fixes #18028

Just changes typedef declarations, no logic changes.
2018-05-30 12:13:58 -07:00
Todd Volkert
d820e5f3b1
Use deprecated io constants (#17278)
The new values are not ready for use yet inside Google
2018-05-03 22:27:29 -07:00