Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(253)

Unified Diff: lib/runtime/dart/html.js

Issue 1633003002: Add --modules=node support (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: reverted let->const parasite change Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: lib/runtime/dart/html.js
diff --git a/lib/runtime/dart/html.js b/lib/runtime/dart/html.js
index 05b7124ec396ee1fc13694bbacb0a8f3fea285af..fa2ecc598d04bc93c781f46b70de864b6a7dfa31 100644
--- a/lib/runtime/dart/html.js
+++ b/lib/runtime/dart/html.js
@@ -10,7 +10,7 @@ dart_library.library('dart/html', null, /* Imports */[
], /* Lazy imports */[
'dart/_metadata',
'dart/html_common'
-], function(exports, dart, math, core, _js_helper, collection, async, _foreign_helper, isolate, _metadata, html_common) {
+], function(exports, dart, math, core, _js_helper, collection, $async, _foreign_helper, isolate, _metadata, html_common) {
'use strict';
let dartx = dart.dartx;
dart.export(exports, math, ['Rectangle', 'Point'], []);
@@ -5519,7 +5519,7 @@ dart_library.library('dart/html', null, /* Imports */[
}
dart.setSignature(Events, {
constructors: () => ({Events: [Events, [EventTarget]]}),
- methods: () => ({get: [async.Stream, [core.String]]})
+ methods: () => ({get: [$async.Stream, [core.String]]})
});
class ElementEvents extends Events {
ElementEvents(ptr) {
@@ -6134,7 +6134,7 @@ dart_library.library('dart/html', null, /* Imports */[
let requestHeaders = opts && 'requestHeaders' in opts ? opts.requestHeaders : null;
let sendData = opts && 'sendData' in opts ? opts.sendData : null;
let onProgress = opts && 'onProgress' in opts ? opts.onProgress : null;
- let completer = async.Completer$(HttpRequest).new();
+ let completer = $async.Completer$(HttpRequest).new();
let xhr = HttpRequest.new();
if (method == null) {
method = 'GET';
@@ -6194,7 +6194,7 @@ dart_library.library('dart/html', null, /* Imports */[
if (dart.notNull(HttpRequest.supportsCrossOrigin)) {
return dart.as(HttpRequest.request(url, {method: method, sendData: sendData}).then(dart.fn(xhr => {
return xhr.responseText;
- }, dart.dynamic, [HttpRequest])), async.Future$(core.String));
+ }, dart.dynamic, [HttpRequest])), $async.Future$(core.String));
}
}
get responseHeaders() {
@@ -6223,13 +6223,13 @@ dart_library.library('dart/html', null, /* Imports */[
return headers;
}
open(method, url, opts) {
- let async = opts && 'async' in opts ? opts.async : null;
+ let async$ = opts && 'async' in opts ? opts.async : null;
let user = opts && 'user' in opts ? opts.user : null;
let password = opts && 'password' in opts ? opts.password : null;
- if (async == null && user == null && password == null) {
+ if (async$ == null && user == null && password == null) {
this.raw.open(method, url);
} else {
- this.raw.open(method, url, async, user, password);
+ this.raw.open(method, url, async$, user, password);
}
}
get responseType() {
@@ -6379,10 +6379,10 @@ dart_library.library('dart/html', null, /* Imports */[
[_setRequestHeader_1]: [dart.void, [dart.dynamic, dart.dynamic]]
}),
statics: () => ({
- getString: [async.Future$(core.String), [core.String], {withCredentials: core.bool, onProgress: dart.functionType(dart.void, [ProgressEvent])}],
- postFormData: [async.Future$(HttpRequest), [core.String, core.Map$(core.String, core.String)], {withCredentials: core.bool, responseType: core.String, requestHeaders: core.Map$(core.String, core.String), onProgress: dart.functionType(dart.void, [ProgressEvent])}],
- request: [async.Future$(HttpRequest), [core.String], {method: core.String, withCredentials: core.bool, responseType: core.String, mimeType: core.String, requestHeaders: core.Map$(core.String, core.String), sendData: dart.dynamic, onProgress: dart.functionType(dart.void, [ProgressEvent])}],
- requestCrossOrigin: [async.Future$(core.String), [core.String], {method: core.String, sendData: core.String}],
+ getString: [$async.Future$(core.String), [core.String], {withCredentials: core.bool, onProgress: dart.functionType(dart.void, [ProgressEvent])}],
+ postFormData: [$async.Future$(HttpRequest), [core.String, core.Map$(core.String, core.String)], {withCredentials: core.bool, responseType: core.String, requestHeaders: core.Map$(core.String, core.String), onProgress: dart.functionType(dart.void, [ProgressEvent])}],
+ request: [$async.Future$(HttpRequest), [core.String], {method: core.String, withCredentials: core.bool, responseType: core.String, mimeType: core.String, requestHeaders: core.Map$(core.String, core.String), sendData: dart.dynamic, onProgress: dart.functionType(dart.void, [ProgressEvent])}],
+ requestCrossOrigin: [$async.Future$(core.String), [core.String], {method: core.String, sendData: core.String}],
_create_1: [HttpRequest, []],
internalCreateHttpRequest: [HttpRequest, []]
}),
@@ -7534,7 +7534,7 @@ dart_library.library('dart/html', null, /* Imports */[
return this[_getBattery_1]();
}
[_getBattery_1]() {
- return dart.as(wrap_jso(this.raw.getBattery()), async.Future);
+ return dart.as(wrap_jso(this.raw.getBattery()), $async.Future);
}
getStorageUpdates() {
this[_getStorageUpdates_1]();
@@ -7568,8 +7568,8 @@ dart_library.library('dart/html', null, /* Imports */[
internal_: [Navigator, []]
}),
methods: () => ({
- getBattery: [async.Future, []],
- [_getBattery_1]: [async.Future, []],
+ getBattery: [$async.Future, []],
+ [_getBattery_1]: [$async.Future, []],
getStorageUpdates: [dart.void, []],
[_getStorageUpdates_1]: [dart.void, []],
registerProtocolHandler: [dart.void, [core.String, core.String, core.String]],
@@ -8610,7 +8610,7 @@ dart_library.library('dart/html', null, /* Imports */[
const _stop_1 = Symbol('_stop_1');
class Window extends EventTarget {
get animationFrame() {
- let completer = async.Completer$(core.num).sync();
+ let completer = $async.Completer$(core.num).sync();
this.requestAnimationFrame(dart.fn(time => {
completer.complete(time);
}, dart.void, [core.num]));
@@ -10228,7 +10228,7 @@ dart_library.library('dart/html', null, /* Imports */[
dart.setSignature(EventStreamProvider, {
constructors: () => ({EventStreamProvider: [EventStreamProvider$(T), [core.String]]}),
methods: () => ({
- forTarget: [async.Stream$(T), [EventTarget], {useCapture: core.bool}],
+ forTarget: [$async.Stream$(T), [EventTarget], {useCapture: core.bool}],
forElement: [ElementStream$(T), [Element], {useCapture: core.bool}],
[_forElementList]: [ElementStream$(T), [ElementList], {useCapture: core.bool}],
getEventType: [core.String, [EventTarget]]
@@ -10239,14 +10239,14 @@ dart_library.library('dart/html', null, /* Imports */[
let EventStreamProvider = EventStreamProvider$();
const ElementStream$ = dart.generic(function(T) {
class ElementStream extends core.Object {}
- ElementStream[dart.implements] = () => [async.Stream$(T)];
+ ElementStream[dart.implements] = () => [$async.Stream$(T)];
return ElementStream;
});
let ElementStream = ElementStream$();
const _target = Symbol('_target');
const _useCapture = Symbol('_useCapture');
const _EventStream$ = dart.generic(function(T) {
- class _EventStream extends async.Stream$(T) {
+ class _EventStream extends $async.Stream$(T) {
_EventStream(target, eventType, useCapture) {
this[_target] = target;
this[_eventType] = eventType;
@@ -10255,9 +10255,9 @@ dart_library.library('dart/html', null, /* Imports */[
}
asBroadcastStream(opts) {
let onListen = opts && 'onListen' in opts ? opts.onListen : null;
- dart.as(onListen, dart.functionType(dart.void, [async.StreamSubscription$(T)]));
+ dart.as(onListen, dart.functionType(dart.void, [$async.StreamSubscription$(T)]));
let onCancel = opts && 'onCancel' in opts ? opts.onCancel : null;
- dart.as(onCancel, dart.functionType(dart.void, [async.StreamSubscription$(T)]));
+ dart.as(onCancel, dart.functionType(dart.void, [$async.StreamSubscription$(T)]));
return this;
}
get isBroadcast() {
@@ -10275,8 +10275,8 @@ dart_library.library('dart/html', null, /* Imports */[
dart.setSignature(_EventStream, {
constructors: () => ({_EventStream: [_EventStream$(T), [EventTarget, core.String, core.bool]]}),
methods: () => ({
- asBroadcastStream: [async.Stream$(T), [], {onListen: dart.functionType(dart.void, [async.StreamSubscription$(T)]), onCancel: dart.functionType(dart.void, [async.StreamSubscription$(T)])}],
- listen: [async.StreamSubscription$(T), [dart.functionType(dart.void, [T])], {onError: core.Function, onDone: dart.functionType(dart.void, []), cancelOnError: core.bool}]
+ asBroadcastStream: [$async.Stream$(T), [], {onListen: dart.functionType(dart.void, [$async.StreamSubscription$(T)]), onCancel: dart.functionType(dart.void, [$async.StreamSubscription$(T)])}],
+ listen: [$async.StreamSubscription$(T), [dart.functionType(dart.void, [T])], {onError: core.Function, onDone: dart.functionType(dart.void, []), cancelOnError: core.bool}]
})
});
return _EventStream;
@@ -10292,7 +10292,7 @@ dart_library.library('dart/html', null, /* Imports */[
dart.as(e, T);
e[_selector] = selector;
return e;
- }, dart.dynamic, [T])), async.Stream$(T));
+ }, dart.dynamic, [T])), $async.Stream$(T));
}
capture(onData) {
dart.as(onData, dart.functionType(dart.void, [T]));
@@ -10303,8 +10303,8 @@ dart_library.library('dart/html', null, /* Imports */[
dart.setSignature(_ElementEventStreamImpl, {
constructors: () => ({_ElementEventStreamImpl: [_ElementEventStreamImpl$(T), [dart.dynamic, dart.dynamic, dart.dynamic]]}),
methods: () => ({
- matches: [async.Stream$(T), [core.String]],
- capture: [async.StreamSubscription$(T), [dart.functionType(dart.void, [T])]]
+ matches: [$async.Stream$(T), [core.String]],
+ capture: [$async.StreamSubscription$(T), [dart.functionType(dart.void, [T])]]
})
});
return _ElementEventStreamImpl;
@@ -10312,7 +10312,7 @@ dart_library.library('dart/html', null, /* Imports */[
let _ElementEventStreamImpl = _ElementEventStreamImpl$();
const _targetList = Symbol('_targetList');
const _ElementListEventStreamImpl$ = dart.generic(function(T) {
- class _ElementListEventStreamImpl extends async.Stream$(T) {
+ class _ElementListEventStreamImpl extends $async.Stream$(T) {
_ElementListEventStreamImpl(targetList, eventType, useCapture) {
this[_targetList] = targetList;
this[_eventType] = eventType;
@@ -10324,7 +10324,7 @@ dart_library.library('dart/html', null, /* Imports */[
dart.as(e, T);
e[_selector] = selector;
return e;
- }, dart.dynamic, [T])), async.Stream$(T));
+ }, dart.dynamic, [T])), $async.Stream$(T));
}
listen(onData, opts) {
dart.as(onData, dart.functionType(dart.void, [T]));
@@ -10336,7 +10336,7 @@ dart_library.library('dart/html', null, /* Imports */[
for (let target of this[_targetList]) {
pool.add(new _EventStream(target, this[_eventType], this[_useCapture]));
}
- return dart.as(pool.stream.listen(onData, {onError: onError, onDone: onDone, cancelOnError: cancelOnError}), async.StreamSubscription$(T));
+ return dart.as(pool.stream.listen(onData, {onError: onError, onDone: onDone, cancelOnError: cancelOnError}), $async.StreamSubscription$(T));
}
capture(onData) {
dart.as(onData, dart.functionType(dart.void, [T]));
@@ -10344,13 +10344,13 @@ dart_library.library('dart/html', null, /* Imports */[
for (let target of this[_targetList]) {
pool.add(new _EventStream(target, this[_eventType], true));
}
- return dart.as(pool.stream.listen(onData), async.StreamSubscription$(T));
+ return dart.as(pool.stream.listen(onData), $async.StreamSubscription$(T));
}
asBroadcastStream(opts) {
let onListen = opts && 'onListen' in opts ? opts.onListen : null;
- dart.as(onListen, dart.functionType(dart.void, [async.StreamSubscription$(T)]));
+ dart.as(onListen, dart.functionType(dart.void, [$async.StreamSubscription$(T)]));
let onCancel = opts && 'onCancel' in opts ? opts.onCancel : null;
- dart.as(onCancel, dart.functionType(dart.void, [async.StreamSubscription$(T)]));
+ dart.as(onCancel, dart.functionType(dart.void, [$async.StreamSubscription$(T)]));
return this;
}
get isBroadcast() {
@@ -10361,10 +10361,10 @@ dart_library.library('dart/html', null, /* Imports */[
dart.setSignature(_ElementListEventStreamImpl, {
constructors: () => ({_ElementListEventStreamImpl: [_ElementListEventStreamImpl$(T), [core.Iterable$(Element), core.String, core.bool]]}),
methods: () => ({
- matches: [async.Stream$(T), [core.String]],
- listen: [async.StreamSubscription$(T), [dart.functionType(dart.void, [T])], {onError: core.Function, onDone: dart.functionType(dart.void, []), cancelOnError: core.bool}],
- capture: [async.StreamSubscription$(T), [dart.functionType(dart.void, [T])]],
- asBroadcastStream: [async.Stream$(T), [], {onListen: dart.functionType(dart.void, [async.StreamSubscription$(T)]), onCancel: dart.functionType(dart.void, [async.StreamSubscription$(T)])}]
+ matches: [$async.Stream$(T), [core.String]],
+ listen: [$async.StreamSubscription$(T), [dart.functionType(dart.void, [T])], {onError: core.Function, onDone: dart.functionType(dart.void, []), cancelOnError: core.bool}],
+ capture: [$async.StreamSubscription$(T), [dart.functionType(dart.void, [T])]],
+ asBroadcastStream: [$async.Stream$(T), [], {onListen: dart.functionType(dart.void, [$async.StreamSubscription$(T)]), onCancel: dart.functionType(dart.void, [$async.StreamSubscription$(T)])}]
})
});
return _ElementListEventStreamImpl;
@@ -10376,7 +10376,7 @@ dart_library.library('dart/html', null, /* Imports */[
const _canceled = Symbol('_canceled');
const _unlisten = Symbol('_unlisten');
const _EventStreamSubscription$ = dart.generic(function(T) {
- class _EventStreamSubscription extends async.StreamSubscription$(T) {
+ class _EventStreamSubscription extends $async.StreamSubscription$(T) {
_EventStreamSubscription(target, eventType, onData, useCapture) {
this[_target] = target;
this[_eventType] = eventType;
@@ -10437,22 +10437,22 @@ dart_library.library('dart/html', null, /* Imports */[
}
asFuture(futureValue) {
if (futureValue === void 0) futureValue = null;
- let completer = async.Completer.new();
+ let completer = $async.Completer.new();
return completer.future;
}
}
dart.setSignature(_EventStreamSubscription, {
constructors: () => ({_EventStreamSubscription: [_EventStreamSubscription$(T), [EventTarget, core.String, dart.dynamic, core.bool]]}),
methods: () => ({
- cancel: [async.Future, []],
+ cancel: [$async.Future, []],
onData: [dart.void, [dart.functionType(dart.void, [T])]],
onError: [dart.void, [core.Function]],
onDone: [dart.void, [dart.functionType(dart.void, [])]],
- pause: [dart.void, [], [async.Future]],
+ pause: [dart.void, [], [$async.Future]],
resume: [dart.void, []],
[_tryResume]: [dart.void, []],
[_unlisten]: [dart.void, []],
- asFuture: [async.Future, [], [dart.dynamic]]
+ asFuture: [$async.Future, [], [dart.dynamic]]
})
});
return _EventStreamSubscription;
@@ -10460,20 +10460,20 @@ dart_library.library('dart/html', null, /* Imports */[
let _EventStreamSubscription = _EventStreamSubscription$();
const CustomStream$ = dart.generic(function(T) {
class CustomStream extends core.Object {}
- CustomStream[dart.implements] = () => [async.Stream$(T)];
+ CustomStream[dart.implements] = () => [$async.Stream$(T)];
return CustomStream;
});
let CustomStream = CustomStream$();
const _streamController = Symbol('_streamController');
const _type = Symbol('_type');
const _CustomEventStreamImpl$ = dart.generic(function(T) {
- class _CustomEventStreamImpl extends async.Stream$(T) {
+ class _CustomEventStreamImpl extends $async.Stream$(T) {
_CustomEventStreamImpl(type) {
this[_streamController] = null;
this[_type] = null;
super.Stream();
this[_type] = type;
- this[_streamController] = async.StreamController$(T).broadcast({sync: true});
+ this[_streamController] = $async.StreamController$(T).broadcast({sync: true});
}
listen(onData, opts) {
dart.as(onData, dart.functionType(dart.void, [T]));
@@ -10485,9 +10485,9 @@ dart_library.library('dart/html', null, /* Imports */[
}
asBroadcastStream(opts) {
let onListen = opts && 'onListen' in opts ? opts.onListen : null;
- dart.as(onListen, dart.functionType(dart.void, [async.StreamSubscription$(T)]));
+ dart.as(onListen, dart.functionType(dart.void, [$async.StreamSubscription$(T)]));
let onCancel = opts && 'onCancel' in opts ? opts.onCancel : null;
- dart.as(onCancel, dart.functionType(dart.void, [async.StreamSubscription$(T)]));
+ dart.as(onCancel, dart.functionType(dart.void, [$async.StreamSubscription$(T)]));
return this[_streamController].stream;
}
get isBroadcast() {
@@ -10502,8 +10502,8 @@ dart_library.library('dart/html', null, /* Imports */[
dart.setSignature(_CustomEventStreamImpl, {
constructors: () => ({_CustomEventStreamImpl: [_CustomEventStreamImpl$(T), [core.String]]}),
methods: () => ({
- listen: [async.StreamSubscription$(T), [dart.functionType(dart.void, [T])], {onError: core.Function, onDone: dart.functionType(dart.void, []), cancelOnError: core.bool}],
- asBroadcastStream: [async.Stream$(T), [], {onListen: dart.functionType(dart.void, [async.StreamSubscription$(T)]), onCancel: dart.functionType(dart.void, [async.StreamSubscription$(T)])}],
+ listen: [$async.StreamSubscription$(T), [dart.functionType(dart.void, [T])], {onError: core.Function, onDone: dart.functionType(dart.void, []), cancelOnError: core.bool}],
+ asBroadcastStream: [$async.Stream$(T), [], {onListen: dart.functionType(dart.void, [$async.StreamSubscription$(T)]), onCancel: dart.functionType(dart.void, [$async.StreamSubscription$(T)])}],
add: [dart.void, [T]]
})
});
@@ -10835,20 +10835,20 @@ dart_library.library('dart/html', null, /* Imports */[
const _StreamPool$ = dart.generic(function(T) {
class _StreamPool extends core.Object {
broadcast() {
- this[_subscriptions] = core.Map$(async.Stream$(T), async.StreamSubscription$(T)).new();
+ this[_subscriptions] = core.Map$($async.Stream$(T), $async.StreamSubscription$(T)).new();
this[_controller] = null;
- this[_controller] = async.StreamController$(T).broadcast({sync: true, onCancel: dart.bind(this, 'close')});
+ this[_controller] = $async.StreamController$(T).broadcast({sync: true, onCancel: dart.bind(this, 'close')});
}
get stream() {
return this[_controller].stream;
}
add(stream) {
- dart.as(stream, async.Stream$(T));
+ dart.as(stream, $async.Stream$(T));
if (dart.notNull(this[_subscriptions].containsKey(stream))) return;
this[_subscriptions].set(stream, stream.listen(dart.bind(this[_controller], 'add'), {onError: dart.bind(this[_controller], 'addError'), onDone: dart.fn((() => this.remove(stream)).bind(this), dart.void, [])}));
}
remove(stream) {
- dart.as(stream, async.Stream$(T));
+ dart.as(stream, $async.Stream$(T));
let subscription = this[_subscriptions].remove(stream);
if (subscription != null) subscription.cancel();
}
@@ -10864,8 +10864,8 @@ dart_library.library('dart/html', null, /* Imports */[
dart.setSignature(_StreamPool, {
constructors: () => ({broadcast: [_StreamPool$(T), []]}),
methods: () => ({
- add: [dart.void, [async.Stream$(T)]],
- remove: [dart.void, [async.Stream$(T)]],
+ add: [dart.void, [$async.Stream$(T)]],
+ remove: [dart.void, [$async.Stream$(T)]],
close: [dart.void, []]
})
});
@@ -10901,7 +10901,7 @@ dart_library.library('dart/html', null, /* Imports */[
dart.setSignature(_CustomEventStreamProvider, {
constructors: () => ({_CustomEventStreamProvider: [_CustomEventStreamProvider$(T), [dart.dynamic]]}),
methods: () => ({
- forTarget: [async.Stream$(T), [EventTarget], {useCapture: core.bool}],
+ forTarget: [$async.Stream$(T), [EventTarget], {useCapture: core.bool}],
forElement: [ElementStream$(T), [Element], {useCapture: core.bool}],
[_forElementList]: [ElementStream$(T), [ElementList], {useCapture: core.bool}],
getEventType: [core.String, [EventTarget]]
@@ -12358,19 +12358,19 @@ dart_library.library('dart/html', null, /* Imports */[
Platform.supportsSimd = false;
dart.defineLazyProperties(Platform, {
get supportsTypedData() {
- return !!window.ArrayBuffer;
+ return !!dart.global.ArrayBuffer;
}
});
function _wrapZone(callback) {
- if (dart.equals(async.Zone.current, async.Zone.ROOT)) return callback;
+ if (dart.equals($async.Zone.current, $async.Zone.ROOT)) return callback;
if (callback == null) return null;
- return async.Zone.current.bindUnaryCallback(callback, {runGuarded: true});
+ return $async.Zone.current.bindUnaryCallback(callback, {runGuarded: true});
}
dart.fn(_wrapZone, dart.dynamic, [dart.functionType(dart.dynamic, [dart.dynamic])]);
function _wrapBinaryZone(callback) {
- if (dart.equals(async.Zone.current, async.Zone.ROOT)) return callback;
+ if (dart.equals($async.Zone.current, $async.Zone.ROOT)) return callback;
if (callback == null) return null;
- return async.Zone.current.bindBinaryCallback(callback, {runGuarded: true});
+ return $async.Zone.current.bindBinaryCallback(callback, {runGuarded: true});
}
dart.fn(_wrapBinaryZone, dart.dynamic, [dart.functionType(dart.dynamic, [dart.dynamic, dart.dynamic])]);
function query(relativeSelectors) {
@@ -12598,10 +12598,12 @@ dart_library.library('dart/html', null, /* Imports */[
sanitizeNode: [dart.void, [Node, Node]]
})
});
- dart.copyProperties(exports, {
+ dart.defineLazyProperties(exports, {
get window() {
- return dart.as(wrap_jso(window), Window);
- },
+ return dart.as(wrap_jso(dart.global), Window);
+ }
+ });
+ dart.copyProperties(exports, {
get document() {
return dart.as(wrap_jso(document), HtmlDocument);
}
@@ -12612,7 +12614,7 @@ dart_library.library('dart/html', null, /* Imports */[
function spawnDomUri(uri, args, message) {
dart.throw(new core.UnimplementedError());
}
- dart.fn(spawnDomUri, async.Future$(isolate.Isolate), [core.Uri, core.List$(core.String), dart.dynamic]);
+ dart.fn(spawnDomUri, $async.Future$(isolate.Isolate), [core.Uri, core.List$(core.String), dart.dynamic]);
const _F1 = dart.typedef('_F1', () => dart.functionType(dart.dynamic, [dart.dynamic]));
const _wrapper = Symbol("dart_wrapper");
function unwrap_jso(wrapped) {

Powered by Google App Engine
This is Rietveld 408576698