Back to build
Raw log | Switch to full mode | Login

Set PYTHONPATH: /b/s/w/ir/kitchen-checkout/build/scripts:/b/s/w/ir/kitchen-checkout/build/site_config:/b/s/w/ir/kitchen-checkout/build/third_party:/b/s/w/ir/kitchen-checkout/build/third_party/buildbot_8_4p1:/b/s/w/ir/kitchen-checkout/build/third_party/buildbot_slave_8_4:/b/s/w/ir/kitchen-checkout/build/third_party/coverage-3.7.1:/b/s/w/ir/kitchen-checkout/build/third_party/decorator_3_3_1:/b/s/w/ir/kitchen-checkout/build/third_party/google_api_python_client:/b/s/w/ir/kitchen-checkout/build/third_party/httplib2/python2:/b/s/w/ir/kitchen-checkout/build/third_party/infra_libs:/b/s/w/ir/kitchen-checkout/build/third_party/jinja2:/b/s/w/ir/kitchen-checkout/build/third_party/markupsafe:/b/s/w/ir/kitchen-checkout/build/third_party/oauth2client:/b/s/w/ir/kitchen-checkout/build/third_party/pyasn1:/b/s/w/ir/kitchen-checkout/build/third_party/pyasn1-modules:/b/s/w/ir/kitchen-checkout/build/third_party/python-rsa:/b/s/w/ir/kitchen-checkout/build/third_party/requests_2_10_0:/b/s/w/ir/kitchen-checkout/build/third_party/setuptools-0.6c11:/b/s/w/ir/kitchen-checkout/build/third_party/sqlalchemy_0_7_1:/b/s/w/ir/kitchen-checkout/build/third_party/sqlalchemy_migrate_0_7_1:/b/s/w/ir/kitchen-checkout/build/third_party/tempita_0_5:/b/s/w/ir/kitchen-checkout/build/third_party/twisted_10_2:/b/s/w/ir/kitchen-checkout/build/third_party/uritemplate:/b/s/w/ir/kitchen-checkout/build/third_party/site-packages 2019-05-23 13:18:04,879 - root: [DEBUG] Using task_output_dir: '/b/s/w/ir/tmp/t/tmpIiVDH2' 2019-05-23 13:18:04,879 - root: [WARNING] task_output_dir '/b/s/w/ir/tmp/t/tmpIiVDH2' already exists! 2019-05-23 13:18:04,879 - root: [WARNING] task_output_dir existing content: [] 2019-05-23 13:18:04,879 - root: [INFO] collect_cmd: swarming collect -server https://chromium-swarm.appspot.com -worker 50 -task-summary-python -task-output-stdout all -verbose -requests-json /b/s/w/ir/tmp/t/tmpaq1jgL.json -output-dir /b/s/w/ir/tmp/t/tmpIiVDH2 -task-summary-json /b/s/w/ir/tmp/t/tmpTZ3n4C.json [D2019-05-23T13:18:04.890203-07:00 21036 0 auth.go:1265] Minting a new token {"key":"luci_ctx/5737a39139fe58180765e0ceead5b07253f4027793f922064d01e329799ee759", "scopes":"https://www.googleapis.com/auth/userinfo.email"} [D2019-05-23T13:18:04.890282-07:00 21036 0 luci_ctx.go:138] POST http://127.0.0.1:46635/rpc/LuciLocalAuthService.GetOAuthToken {"key":"luci_ctx/5737a39139fe58180765e0ceead5b07253f4027793f922064d01e329799ee759", "scopes":"https://www.googleapis.com/auth/userinfo.email"} [D2019-05-23T13:18:04.892013-07:00 21036 0 auth.go:1222] Token expires in 8m58.108023819s {"key":"luci_ctx/5737a39139fe58180765e0ceead5b07253f4027793f922064d01e329799ee759", "scopes":"https://www.googleapis.com/auth/userinfo.email"} 44ff1cbe0b952810: exit 0 /b/s/swarming_bot.1.zip/third_party/requests/__init__.py:83: RequestsDependencyWarning: Old version of cryptography ([1, 2, 3]) may cause slowdown. tools/testing/dart/main.dart:1: Warning: Interpreting this as package URI, 'package:test_dart/main.dart'. Test configurations: dartkp-obfuscate-linux-release-x64(architecture: x64, compiler: dartkp, mode: release, runtime: dart_precompiled, system: linux, builder-tag: obfuscated, vm-options: [--obfuscate], dart2js-options: [], timeout: null, preview-dart-2) Suites tested: samples, standalone, standalone_2, corelib_2, language_2, vm, benchmark_smoke, utils, lib_2, analyze_library, service, kernel, ffi dartkp-obfuscate-linux-release-x64(architecture: x64, compiler: dartkp, mode: release, runtime: dart_precompiled, system: linux, builder-tag: obfuscated, vm-options: [--obfuscate], dart2js-options: [], timeout: null, preview-dart-2) Suites tested: observatory_ui Total: 983 tests * 114 tests will be skipped (90 skipped by design) * 2 tests are expected to be flaky but not crash * 4 tests are expected to flaky crash * 829 tests are expected to pass * 1 tests are expected to fail that we won't fix * 32 tests are expected to fail that we should fix * 0 tests are expected to crash that we should fix * 0 tests are allowed to timeout * 1 could not be categorized or are in multiple categories FAILED: dartkp-dart_precompiled release_x64 corelib_2/unsigned_shift_test/none Expected: Pass Actual: CompileTimeError Unexpected compile error. --- Command "vm_compile_to_kernel []" (took 506ms): DART_CONFIGURATION=ReleaseX64 /b/s/w/ir/pkg/vm/tool/gen_kernel --aot --platform=out/ReleaseX64/vm_platform_strong.dill -o /b/s/w/ir/out/ReleaseX64/generated_compilations/dartkp/multitest_corelib_2_unsigned_shift_test_none/out.dill /b/s/w/ir/out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart --enable-experiment=triple-shift --packages=/b/s/w/ir/.packages -Ddart.developer.causal_async_stacks=true exit code: 1 stdout: Unknown experiment: triple-shift out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:81:1: Error: Can't have modifier 'const' here. Try removing 'const'. const bool isJSBitOps => (-1 | 0) > 0; ^^^^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:81:12: Error: A function declaration needs an explicit list of parameters. Try adding a parameter list to the function declaration. const bool isJSBitOps => (-1 | 0) > 0; ^^^^^^^^^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:114:14: Error: A method declaration needs an explicit list of parameters. Try adding a parameter list to the method declaration. C operator >>>(C other) => other; ^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:114:16: Error: Expected '{' before this. C operator >>>(C other) => other; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:114:14: Error: Operator '>>' should have exactly one parameter. C operator >>>(C other) => other; ^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:114:16: Error: Operator declarations must be preceded by the keyword 'operator'. Try adding the keyword 'operator'. C operator >>>(C other) => other; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:16:3: Error: Method not found: 'testNonDoubleShifts'. testNonDoubleShifts(); ^^^^^^^^^^^^^^^^^^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:43:29: Error: Expected an identifier, but got '>'. Expect.throws(() => 1 >>> number); // infinity > 64. ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:52:36: Error: Expected an identifier, but got '>'. Expect.throws(() => number >>> 1); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:53:31: Error: Expected an identifier, but got '>'. Expect.throws(() => 1 >>> number); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:61:18: Error: Expected an identifier, but got '>'. const c1 = 2 >>> 1; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:62:19: Error: Expected an identifier, but got '>'. const c2 = (1 >>> 0) >>> 0; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:62:26: Error: Expected an identifier, but got '>'. const c2 = (1 >>> 0) >>> 0; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:65:30: Error: Expected an identifier, but got '>'. const c3 = false ? 1 : c >>> c; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:66:26: Error: Expected an identifier, but got '>'. const c4 = true || c >>> c; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:78:10: Error: Method not found: 'Expect.notNull'. Expect.notNull(c1 + c2 + c3 + c4); // Avoid "unused variable" warnings. ^^^^^^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:62:24: Error: The method '>>' isn't defined for the class 'bool'. Try correcting the name to the name of an existing method, or defining a method named '>>'. const c2 = (1 >>> 0) >>> 0; ^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart: Error: Too many positional arguments: 0 allowed, but 1 found. Try removing the extra positional arguments. out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:78:21: Error: The method '+' isn't defined for the class 'bool'. Try correcting the name to the name of an existing method, or defining a method named '+'. Expect.notNull(c1 + c2 + c3 + c4); // Avoid "unused variable" warnings. ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:82:23: Error: A value of type 'bool Function()' can't be assigned to a variable of type 'bool'. Try changing the type of the left hand side, or casting the right hand side to 'bool'. const String jsFlag = isJSBitOps ? " (JS)" : ""; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:88:33: Error: Expected an identifier, but got '>'. Expect.throws(() => value >>> shift, "$title: shift < 0"); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:93:33: Error: Expected an identifier, but got '>'. Expect.throws(() => value >>> shift, "$title: shift > 64"); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:97:7: Error: Getter not found: 'isJsBitOps'. if (isJsBitOps) { ^^^^^^^^^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:109:35: Error: Expected an identifier, but got '>'. Expect.equals(expected, value >>> shift, title); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:88:61: Error: The argument type 'String' can't be assigned to the parameter type 'bool Function(dynamic)'. Try changing the type of the parameter, or casting the argument to 'bool Function(dynamic)'. Expect.throws(() => value >>> shift, "$title: shift < 0"); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:91:8: Error: A value of type 'bool Function()' can't be assigned to a variable of type 'bool'. Try changing the type of the left hand side, or casting the right hand side to 'bool'. if (!isJSBitOps && shift > 64) { ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:93:62: Error: The argument type 'String' can't be assigned to the parameter type 'bool Function(dynamic)'. Try changing the type of the parameter, or casting the argument to 'bool Function(dynamic)'. Expect.throws(() => value >>> shift, "$title: shift > 64"); ^ --- Re-run this test: python tools/test.py -n dartkp-obfuscate-linux-release-x64 corelib_2/unsigned_shift_test/none 604 out of 869 completed Tests running for 5 minutes === Failure summary: FAILED: dartkp-dart_precompiled release_x64 corelib_2/unsigned_shift_test/none Expected: Pass Actual: CompileTimeError Unexpected compile error. --- Command "vm_compile_to_kernel []" (took 506ms): DART_CONFIGURATION=ReleaseX64 /b/s/w/ir/pkg/vm/tool/gen_kernel --aot --platform=out/ReleaseX64/vm_platform_strong.dill -o /b/s/w/ir/out/ReleaseX64/generated_compilations/dartkp/multitest_corelib_2_unsigned_shift_test_none/out.dill /b/s/w/ir/out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart --enable-experiment=triple-shift --packages=/b/s/w/ir/.packages -Ddart.developer.causal_async_stacks=true exit code: 1 stdout: Unknown experiment: triple-shift out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:81:1: Error: Can't have modifier 'const' here. Try removing 'const'. const bool isJSBitOps => (-1 | 0) > 0; ^^^^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:81:12: Error: A function declaration needs an explicit list of parameters. Try adding a parameter list to the function declaration. const bool isJSBitOps => (-1 | 0) > 0; ^^^^^^^^^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:114:14: Error: A method declaration needs an explicit list of parameters. Try adding a parameter list to the method declaration. C operator >>>(C other) => other; ^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:114:16: Error: Expected '{' before this. C operator >>>(C other) => other; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:114:14: Error: Operator '>>' should have exactly one parameter. C operator >>>(C other) => other; ^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:114:16: Error: Operator declarations must be preceded by the keyword 'operator'. Try adding the keyword 'operator'. C operator >>>(C other) => other; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:16:3: Error: Method not found: 'testNonDoubleShifts'. testNonDoubleShifts(); ^^^^^^^^^^^^^^^^^^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:43:29: Error: Expected an identifier, but got '>'. Expect.throws(() => 1 >>> number); // infinity > 64. ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:52:36: Error: Expected an identifier, but got '>'. Expect.throws(() => number >>> 1); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:53:31: Error: Expected an identifier, but got '>'. Expect.throws(() => 1 >>> number); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:61:18: Error: Expected an identifier, but got '>'. const c1 = 2 >>> 1; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:62:19: Error: Expected an identifier, but got '>'. const c2 = (1 >>> 0) >>> 0; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:62:26: Error: Expected an identifier, but got '>'. const c2 = (1 >>> 0) >>> 0; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:65:30: Error: Expected an identifier, but got '>'. const c3 = false ? 1 : c >>> c; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:66:26: Error: Expected an identifier, but got '>'. const c4 = true || c >>> c; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:78:10: Error: Method not found: 'Expect.notNull'. Expect.notNull(c1 + c2 + c3 + c4); // Avoid "unused variable" warnings. ^^^^^^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:62:24: Error: The method '>>' isn't defined for the class 'bool'. Try correcting the name to the name of an existing method, or defining a method named '>>'. const c2 = (1 >>> 0) >>> 0; ^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart: Error: Too many positional arguments: 0 allowed, but 1 found. Try removing the extra positional arguments. out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:78:21: Error: The method '+' isn't defined for the class 'bool'. Try correcting the name to the name of an existing method, or defining a method named '+'. Expect.notNull(c1 + c2 + c3 + c4); // Avoid "unused variable" warnings. ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:82:23: Error: A value of type 'bool Function()' can't be assigned to a variable of type 'bool'. Try changing the type of the left hand side, or casting the right hand side to 'bool'. const String jsFlag = isJSBitOps ? " (JS)" : ""; ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:88:33: Error: Expected an identifier, but got '>'. Expect.throws(() => value >>> shift, "$title: shift < 0"); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:93:33: Error: Expected an identifier, but got '>'. Expect.throws(() => value >>> shift, "$title: shift > 64"); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:97:7: Error: Getter not found: 'isJsBitOps'. if (isJsBitOps) { ^^^^^^^^^^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:109:35: Error: Expected an identifier, but got '>'. Expect.equals(expected, value >>> shift, title); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:88:61: Error: The argument type 'String' can't be assigned to the parameter type 'bool Function(dynamic)'. Try changing the type of the parameter, or casting the argument to 'bool Function(dynamic)'. Expect.throws(() => value >>> shift, "$title: shift < 0"); ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:91:8: Error: A value of type 'bool Function()' can't be assigned to a variable of type 'bool'. Try changing the type of the left hand side, or casting the right hand side to 'bool'. if (!isJSBitOps && shift > 64) { ^ out/ReleaseX64/generated_tests/corelib_2/unsigned_shift_test_none.dart:93:62: Error: The argument type 'String' can't be assigned to the parameter type 'bool Function(dynamic)'. Try changing the type of the parameter, or casting the argument to 'bool Function(dynamic)'. Expect.throws(() => value >>> shift, "$title: shift > 64"); ^ --- Re-run this test: python tools/test.py -n dartkp-obfuscate-linux-release-x64 corelib_2/unsigned_shift_test/none === === 1 test failed === --- Total time: 08:37 --- 0:00:43.535783 - vm - dartkp-dart_precompiled release_x64/lib_2/convert/streamed_conversion_json_utf8_decode_test/0 0:00:15.279536 - vm_compile_to_kernel [] - dartkp-dart_precompiled release_x64/corelib_2/iterable_return_type_test/none 0:00:15.214032 - vm_compile_to_kernel [] - dartkp-dart_precompiled release_x64/corelib_2/iterable_return_type_test/02 0:00:15.154978 - vm_compile_to_kernel [] - dartkp-dart_precompiled release_x64/corelib_2/iterable_return_type_test/01 0:00:14.713151 - vm_compile_to_kernel [] - dartkp-dart_precompiled release_x64/corelib_2/double_floor2_test 0:00:14.142502 - vm_compile_to_kernel [] - dartkp-dart_precompiled release_x64/corelib_2/uri_parameters_all_test 0:00:13.977567 - vm_compile_to_kernel [] - dartkp-dart_precompiled release_x64/corelib_2/map_from_entries_test 0:00:13.855451 - vm_compile_to_kernel [] - dartkp-dart_precompiled release_x64/corelib_2/reg_exp_all_matches_test 0:00:13.593854 - vm_compile_to_kernel [] - dartkp-dart_precompiled release_x64/corelib_2/double_truncate_to_double_test 0:00:10.144448 - precompiler - dartkp-dart_precompiled release_x64/lib_2/convert/streamed_conversion_json_utf8_decode_test/0 0:00:09.468939 - vm - dartkp-dart_precompiled release_x64/language_2/closure_cycles_test 0:00:05.413284 - vm_compile_to_kernel [] - dartkp-dart_precompiled release_x64/standalone_2/io/dependency_graph_test 0:00:05.232052 - precompiler - dartkp-dart_precompiled release_x64/language_2/malformed_bound_test/none 0:00:05.176253 - precompiler - dartkp-dart_precompiled release_x64/language_2/naming2_test 0:00:05.044548 - precompiler - dartkp-dart_precompiled release_x64/language_2/deferred_type_dependency_test/as 0:00:05.026564 - precompiler - dartkp-dart_precompiled release_x64/language_2/if_null_assignment_static_test/24 0:00:05.021922 - precompiler - dartkp-dart_precompiled release_x64/language_2/deferred_type_dependency_test/type_annotation 0:00:05.013362 - precompiler - dartkp-dart_precompiled release_x64/standalone_2/io/file_non_ascii_sync_test 0:00:05.011427 - precompiler - dartkp-dart_precompiled release_x64/standalone_2/io/web_socket_compression_test/3 0:00:04.988257 - precompiler - dartkp-dart_precompiled release_x64/lib_2/async/stream_event_transformed_test INFO: Core dump archiving is activated INFO: No unexpected crashes recorded 2019-05-23 13:18:06,339 - root: [DEBUG] Contents of task_output_dir: ['/b/s/w/ir/tmp/t/tmpIiVDH2/44ff1cbe0b952810'] 2019-05-23 13:18:06,340 - root: [WARNING] Expected output.json file missing: set(['/b/s/w/ir/tmp/t/tmpIiVDH2/44ff1cbe0b952810/output.json']) Found: [] Expected: ['/b/s/w/ir/tmp/t/tmpIiVDH2/44ff1cbe0b952810/output.json'] 2019-05-23 13:18:06,340 - root: [WARNING] No shard json files found in task_output_dir: '/b/s/w/ir/tmp/t/tmpIiVDH2' Found ['/b/s/w/ir/tmp/t/tmpIiVDH2/44ff1cbe0b952810'] 2019-05-23 13:18:06,340 - root: [DEBUG] Found shard_json_files: ['/b/s/w/ir/tmp/t/tmpIiVDH2/44ff1cbe0b952810/output.json'] 2019-05-23 13:18:06,340 - root: [INFO] merge_cmd: /b/s/w/ir/cache/vpython/f6423e/bin/python /b/s/w/ir/kitchen-checkout/build/scripts/slave/recipe_modules/chromium_swarming/resources/noop_merge.py --summary-json /b/s/w/ir/tmp/t/tmpTZ3n4C.json --task-output-dir /b/s/w/ir/tmp/t/tmpIiVDH2 -o /b/s/w/ir/tmp/t/tmpupsv4f.json Running ['/b/s/w/ir/cache/vpython/f6423e/bin/python', '/b/s/w/ir/kitchen-checkout/build/scripts/slave/recipe_modules/chromium_swarming/resources/noop_merge.py', '--summary-json', '/b/s/w/ir/tmp/t/tmpTZ3n4C.json', '--task-output-dir', '/b/s/w/ir/tmp/t/tmpIiVDH2', '-o', '/b/s/w/ir/tmp/t/tmpupsv4f.json'] in None (env: None) Command ['/b/s/w/ir/cache/vpython/f6423e/bin/python', '/b/s/w/ir/kitchen-checkout/build/scripts/slave/recipe_modules/chromium_swarming/resources/noop_merge.py', '--summary-json', '/b/s/w/ir/tmp/t/tmpTZ3n4C.json', '--task-output-dir', '/b/s/w/ir/tmp/t/tmpIiVDH2', '-o', '/b/s/w/ir/tmp/t/tmpupsv4f.json'] returned exit code 0