The limit only applied within a child process.
However, within a child process we already share cubeb stream when requesting
the same device multiple times, and disallow capturing from more than one device
at a time.
This limit no longer has any effect.
Differential Revision: https://phabricator.services.mozilla.com/D10339
--HG--
extra : moz-landing-system : lando
Also remove specified-value-only keywords, since those are handled
only in Rust code and C++ doesn't need to know about them.
Differential Revision: https://phabricator.services.mozilla.com/D9634
--HG--
extra : moz-landing-system : lando
1. Add a new preference, layout.css.step-position-jump.enabled, for
step(_, jump-*) timing functions.
2. We still keep JumpEnd and End tags, even though there is no difference
between them. Therefore, we could disable the preference if needed.
3. Update the calculation of StepTiming to match the algorithm in the spec.
4. For servo, we implement the correct step function algorithm except
for the handling of before_flag. This could be fixed later.
Depends on D9313
Differential Revision: https://phabricator.services.mozilla.com/D9314
--HG--
extra : moz-landing-system : lando
frames() timing function was removed from the spec, so we drop it.
Besides, some devtool tests are removed because they use frame(). I will
add them back by using new step function later.
Differential Revision: https://phabricator.services.mozilla.com/D9309
--HG--
extra : moz-landing-system : lando
This is what we have been working towards in all of the previous parts
in the series. This subclasses AnimationFrameDiscardingQueue to save the
discarded frames for recycling by the decoder, if the frame is marked as
supporting recycling.
Differential Revision: https://phabricator.services.mozilla.com/D7516
This commit adds a scroll origin, nsGkAtoms::relative, which can be used to
mark main thread scrolling that can be combined with a concurrent APZ scroll.
The behavior of this is controlled by a pref, apz.relative-update. This pref
is initially activated and is intended as an aid to narrowing down causes
of regressions for users in bug reports.
Relative scroll updates work by tracking the last sent or accepted APZ
scroll offset. This is sent along with every FrameMetrics. Additionally,
a flag is added to FrameMetrics, mIsRelative, indicating whether the
scroll offset can be combined with a potential APZ scroll. When this
flag is set, AsyncPanZoomController will apply the delta between the sent
base scroll offset, and sent new scroll offset.
This flag is controlled by the last scroll origin on nsGfxScrollFrame. The
new origin, `relative`, is marked as being able to clobber APZ updates,
but can only be set if all scrolls since the last repaint request or
layers transaction have been relative.
Differential Revision: https://phabricator.services.mozilla.com/D8234
--HG--
extra : rebase_source : 51351a84c9cda228a0975e22eda3fd3bd8d261c4
extra : histedit_source : 4b564c19b16fe2bd26adc671b62b7cb6106e8163
The Webrender Pref Experiment is reporting its pref via telemetry and that is
reporting a different value than what the Normandy experiments telemetry
indicates should be being seen.
In Bug 1499552 I added a pref and telemetry reporting in preparation for running
a dummy Pref Experiment to verify that prefs set are reported as set, but I
realised I missed a case; where there's an existing default pref set,
we're only covering the case where that default pref has value false. We're seeing
a ~25% failure rate in the pref reporting. So we should cover the other three cases
in the dummy Pref Experiment, just in case it's one of these four cases that
is failing.
So here I add another dummy pref with a default value of true, and I report that
via telemetry. I rename the pref I added yesterday to make things consistent.
Differential Revision: https://phabricator.services.mozilla.com/D9156
--HG--
extra : moz-landing-system : lando
Add a pref called gfx.font_ahem_antialias_none which disables
antialiasing for any font with the family name "Ahem". This is useful
for wpt reftests where antialaising of Ahem causes spurious failures.
Differential Revision: https://phabricator.services.mozilla.com/D7200
Disable dom.xhr.standard_content_type_normalization for now due to webcompat issues
Differential Revision: https://phabricator.services.mozilla.com/D8789
--HG--
extra : moz-landing-system : lando
The Webrender Pref Experiment is reporting its pref via telemetry and that
is reporting a different value than what the Normandy experiments telemetry
indicates should be being seen.
So add reporting for two dummy prefs, one with a default value, and one
without. We intend to push out Normandy rules to report these prefs to
double-check that Normandy is working as expected.
Differential Revision: https://phabricator.services.mozilla.com/D8926
--HG--
extra : moz-landing-system : lando
Disable dom.xhr.standard_content_type_normalization for now due to webcompat issues
Differential Revision: https://phabricator.services.mozilla.com/D8789
--HG--
extra : moz-landing-system : lando
This implements the selector(<complex-selector>) syntax for @supports.
See https://github.com/w3c/csswg-drafts/issues/3207 for explainer and
discussion.
Probably would should wait for that to be sorted out to land this, or maybe we
should put it behind a pref to get the code landed and change our
implementation if the discussion there leads to a change.
Differential Revision: https://phabricator.services.mozilla.com/D8864
--HG--
extra : moz-landing-system : lando
This changes the containerful scrolling pref to be an override pref
such that it is:
- always false on desktop (i.e. always use containerless there)
- always true in Fennec (i.e. never use containerless there)
- true in GeckoView if WebRender is disabled (i.e. only use
containerless with WebRender).
The first two cases are the same as before; the last case is new.
Because we don't create layers with WR, the containerless vs
containerful distinction doesn't make much sense there, and we need to
implement a bunch of zooming glue in either case. So it makes sense to
go with the "way of the future" and keep it containerless.
Differential Revision: https://phabricator.services.mozilla.com/D8733
--HG--
extra : moz-landing-system : lando
Update placeholder value of DNS over HTTPS input to the cloudflare provider add a default pref value for network.trr.uri
Differential Revision: https://phabricator.services.mozilla.com/D8639
--HG--
extra : moz-landing-system : lando
This adds a button to the preferences UI to restore the default value for network.trr.uri preference.
Differential Revision: https://phabricator.services.mozilla.com/D7359
--HG--
extra : moz-landing-system : lando
It just doesn't work.
We add the preference media.wmf.force.allow-p010-format to force enable it.
Depends on D8136
Differential Revision: https://phabricator.services.mozilla.com/D8310
--HG--
extra : moz-landing-system : lando
Adds a timout that will resolve the promise to return even if we did not get an answer from
all children.
MozReview-Commit-ID: FFLwAUkkYos
Differential Revision: https://phabricator.services.mozilla.com/D7265
--HG--
extra : moz-landing-system : lando
This increases the default amount of content processes on nightly to 8. It
is nightly only and will not ride the trains.
--HG--
extra : rebase_source : 54bfae28921240d985957d59bf64ca91bd6a0f19
extra : intermediate-source : 72e7ef77480d0845ceabb5d3747a5523db6bda9d
extra : source : d5375325488f449c45dd032bc8167ebebca07497
For now, the H264 decoding support is rather sturdy. It handles change of resolution and content smoothly thanks to the H264Converter.
The VP8/VP9 one however, not so much.
So we make a preference to only enable H264 for now.
Depends on D7895
Differential Revision: https://phabricator.services.mozilla.com/D7908
--HG--
extra : moz-landing-system : lando
Summary:
The fix of bug 1479964 breaks some web apps using Google Closure including
Google's apps. So, for Nightly testers, we should disable the new behavior
until Google Closure fixes it or we can disable the new behavior per web apps.
Reviewers: smaug
Reviewed By: smaug
Bug #: 1497546
Differential Revision: https://phabricator.services.mozilla.com/D8090
--HG--
extra : histedit_source : 03f59268c220297040c1c5186e62a05710d468b9
Chrome sets both KeyboardEvent.keyCode and KeyboardEvent.charCode of "keypress"
event to same value. On the other hand, our traditional behavior is, sets
one of them to 0.
Therefore, we need to set keyCode value to charCode value if the keypress
event is caused by a non-function key, i.e., it may be a printable key with
specific modifier state and/or different keyboard layout for compatibility
with Chrome. Similarly, we need to set charCode value to keyCode value if
the keypress event is caused by a function key which is not mapped to producing
a character.
Note that this hack is for compatibility with Chrome. So, for now, it's enough
to change the behavior only for "keypress" event handlers in web content. If
we completely change the behavior, we need to fix a lot of default handlers
and mochitests too. However, it's really difficult because default handlers
check whether keypress events are printable or not with following code:
> if (event.charCode &&
> !event.altKey && !event.ctrlKey && !event.metaKey) {
or
> if (!event.keyCode &&
> !event.altKey && !event.ctrlKey && !event.metaKey) {
So, until we stop dispatching "keypress" events for non-printable keys,
we need complicated check in each of them.
And also note that this patch changes the behavior of KeyboardEvent::KeyCode()
when spoofing is enabled and the instance is initialized by initKeyEvent() or
initKeyboardEvent(). That was changed by bug 1222285 unexpectedly and keeping
the behavior makes patched code really ugly. Therefore, this takes back the
old behavior even if spoofing is enabled.
Differential Revision: https://phabricator.services.mozilla.com/D7974
--HG--
extra : moz-landing-system : lando
This increases the default amount of content processes on nightly to 8. It
is nightly only and will not ride the trains.
--HG--
extra : rebase_source : a39b9aa36e10e18b8c8e050d69d639178b6f1a5a
extra : source : d5375325488f449c45dd032bc8167ebebca07497
These have been been on nightly / beta for a couple months without any single
regression filed against them.
Let the prefs ride the trains, but keep them, so we can toggle them easily if
needed.
Differential Revision: https://phabricator.services.mozilla.com/D7960
--HG--
extra : moz-landing-system : lando
This activates by default the new about:performance page and its underlying
counters in Firefox
MozReview-Commit-ID: LccL6zBHUHm
Differential Revision: https://phabricator.services.mozilla.com/D7884
--HG--
extra : moz-landing-system : lando
JIT warmup options were exposed to preferences to facilitate experimentation/optimization.
The baseline and ion warm up thresholds had already been exposed through JSAPI, just needed to read from Preferences.
The ion JitOption, frequentBailoutThreshold, was also exposed to JSAPI and Preferences.
Differential Revision: https://phabricator.services.mozilla.com/D7321
--HG--
extra : moz-landing-system : lando
Etherpad fixed the bug with new Gecko behavior and has already released
it in this August. So, even if some instances still use older versions,
we can request them to update the version.
This patch removes all Etherpad instances we know from the blacklist
of strict keypress dispatching. So, Nightly testers can find old
instances easier.
Differential Revision: https://phabricator.services.mozilla.com/D7694
--HG--
extra : moz-landing-system : lando
This moves UAWidgetsChild.jsm from browser to toolkit so that
Fennec and Reftest could pick it up.
Differential Revision: https://phabricator.services.mozilla.com/D5085
--HG--
rename : browser/actors/UAWidgetsChild.jsm => toolkit/actors/UAWidgetsChild.jsm
extra : moz-landing-system : lando
StructuredCloneTester objects can configured to be serializable (or not) and
deserializable (or not) by the structured clone algorithm. They can be used to
test, for example, onmessageerror event handlers, where the messageerror event
is fired when a message fails to be deserialized (but was successfully serialized).
The class is pref'ed with "dom.testing.structuredclonetester.enabled".
Differential Revision: https://phabricator.services.mozilla.com/D5207
--HG--
extra : moz-landing-system : lando
99.15% of all TRR requests are done within 1.56 seconds (in beta 63) and
1500 milliseconds is already a very long time to wait for a resolve to
fail... The median is 44 ms and 95th percentile is at 471 ms.
MozReview-Commit-ID: CICBAA0cEBd
Differential Revision: https://phabricator.services.mozilla.com/D7336
--HG--
extra : moz-landing-system : lando
Medium's editor listens to keypress event to handle Ctrl+Z and Ctrl+Y on Gecko.
Therefore, if we don't dispatch keypress events for non-printable keys (by
default on Nightly), users cannot use undo/redo in medium.com.
This patch makes the editor of medium.com into the blacklist of strict
keypress dispatching for avoiding inconvenience of Nightly testers.
Differential Revision: https://phabricator.services.mozilla.com/D7390
--HG--
extra : moz-landing-system : lando
I can be more granular if we want, by adding more ChromeOnly annotations for the
functions that we don't want to expose.
Differential Revision: https://phabricator.services.mozilla.com/D6530
--HG--
extra : moz-landing-system : lando
change default pref to on for lowercase header names in XHR.getAllResponseHeaders
Differential Revision: https://phabricator.services.mozilla.com/D6589
--HG--
extra : moz-landing-system : lando
By delegating responsibility for shared surfaces reporting to imagelib,
we can cross reference the GPU shared surfaces cache with the local
surface cache in a content process (or the main process). This will
allow us to identify entries that are in the GPU cache but not in the
content/main process cache, and aid in debugging memory leaks. This
functionality is pref'd off by default behind image.mem.debug-reporting.
Additionally, we want to report every entry that was mapped into the
compositor process, in the compositor process memory report. This will
give us a sense of how much of our resident memory is consumed by mapped
images in absence of the more detailed cross referencing above.
"layers.async-pan-zoom.enabled" has been enabled for all platforms for a
long time. I reword the comment to avoid confusion.
Differential Revision: https://phabricator.services.mozilla.com/D5471
--HG--
extra : moz-landing-system : lando
There is one main difference between raster images and vector images
with respect to factor of 2 scaling. Vector images may be scaled
infinitely and so we need to extend factor of 2 scaling to permit
growing instead of just shrinking. Also, we don't want to scale
infinitely, so we should configure a maximum size limit. This size limit
will apply even outside of factor of 2 scaling, and so the caller
(VectorImage) will need to be careful to take this into account.
There is one main difference between raster images and vector images
with respect to factor of 2 scaling. Vector images may be scaled
infinitely and so we need to extend factor of 2 scaling to permit
growing instead of just shrinking. Also, we don't want to scale
infinitely, so we should configure a maximum size limit. This size limit
will apply even outside of factor of 2 scaling, and so the caller
(VectorImage) will need to be careful to take this into account.
Everything that goes in a PLDHashtable (and its derivatives, like
nsTHashtable) needs to inherit from PLDHashEntryHdr. But through a lack
of enforcement, copy constructors for these derived classes didn't
explicitly invoke the copy constructor for PLDHashEntryHdr (and the
compiler didn't invoke the copy constructor for us). Instead,
PLDHashTable explicitly copied around the bits that the copy constructor
would have.
The current setup has two problems:
1) Derived classes should be using move construction, not copy
construction, since anything that's shuffling hash table keys/entries
around will be using move construction.
2) Derived classes should take responsibility for transferring bits of
superclass state around, and not rely on something else to handle that.
The second point is not a huge problem for PLDHashTable (PLDHashTable
only has to copy PLDHashEntryHdr's bits in a single place), but future
hash table implementations that might move entries around more
aggressively would have to insert compensation code all over the
place. Additionally, if moving entries is implemented via memcpy (which
is quite common), PLDHashTable copying around bits *again* is
inefficient.
Let's fix all these problems in one go, by:
1) Explicitly declaring the set of constructors that PLDHashEntryHdr
implements (and does not implement). In particular, the copy
constructor is deleted, so any derived classes that attempt to make
themselves copyable will be detected at compile time: the compiler
will complain that the superclass type is not copyable.
This change on its own will result in many compiler errors, so...
2) Change any derived classes to implement move constructors instead of
copy constructors. Note that some of these move constructors are,
strictly speaking, unnecessary, since the relevant classes are moved
via memcpy in nsTHashtable and its derivatives.
3% download protection remote lookup failures are from timeout.
Increase the timeout from 10sec to 15sec to see if this help.
Differential Revision: https://phabricator.services.mozilla.com/D5265
--HG--
extra : moz-landing-system : lando
have XHRs adjust content type of uploads per spec using the MIME Sniffing standard
Differential Revision: https://phabricator.services.mozilla.com/D5969
--HG--
extra : moz-landing-system : lando
Currently, we have some Gecko specific editing UI:
- Resizers to resize <img>s, <table>s, absolutely positioned elements.
- Inline-table-editing UI to add/remove rows/columns.
- Grabber to move absolutely positioned element.
They are now disabled by default in Nightly and early-Beta. Starting from 64,
this patch makes them disabled by default even on release channel.
Note that the other browsers do not have those UIs and web apps can enable
them with document.execCommand() on Gecko anyway. Those UI usage is enough
low according to the telemetry, but a few users use them aggressively (see
bug 1452538 comment 19).
This is a request from W3C Editing API WG:
https://github.com/w3c/editing/issues/171
Differential Revision: https://phabricator.services.mozilla.com/D6112
--HG--
extra : moz-landing-system : lando
Some Gtk+ themes use non-rectangular toplevel windows. To fully support
such themes we need to make toplevel window transparent with ARGB visual.
It may cause performanance issue so make it configurable
and enable it by default for GNOME right now as it already uses ARGB visual
for widgets.
Also use mozilla.widget.use-argb-visuals to override this.
Differential Revision: https://phabricator.services.mozilla.com/D5754
--HG--
extra : moz-landing-system : lando
The performance counter is now also used in the children, and
the ParentAPIManager.retrievePerformanceCounters() can be used
to aggregate all counters into a promise.
Differential Revision: https://phabricator.services.mozilla.com/D5399
--HG--
extra : moz-landing-system : lando
Moving this to C++ caused browser.dom.window.dump.enabled to become false in artifact
builds, since MOZILLA_OFFICIAL is true for the binaries used in that case. Restoring
the preference in all.js fixes this, since that file is built locally with artifact builds.
Differential Revision: https://phabricator.services.mozilla.com/D5586
--HG--
extra : moz-landing-system : lando
"layers.async-pan-zoom.enabled" has been enabled for all platforms for a
long time. I reword the comment to avoid confusion.
Differential Revision: https://phabricator.services.mozilla.com/D5471
"layers.async-pan-zoom.enabled" has been enabled for all platforms for a
long time. I reword the comment to avoid confusion.
Differential Revision: https://phabricator.services.mozilla.com/D5471
--HG--
extra : moz-landing-system : lando
Use PrioEncoder to encode a few already-included histograms, so we can compare results on the Telemetry server side.
Differential Revision: https://phabricator.services.mozilla.com/D5088
--HG--
extra : moz-landing-system : lando
Some Gtk+ themes use non-rectangular toplevel windows. To fully support
such themes we need to make toplevel window transparent with ARGB visual.
It may cause performance issue so let's put it under a preference
and allow distros to enable it per default theme.
Depends on D4664
Differential Revision: https://phabricator.services.mozilla.com/D4665
--HG--
extra : moz-landing-system : lando
Add a preference, layout.css.clip-path-path.enabled, for |clip-path:path()|.
Differential Revision: https://phabricator.services.mozilla.com/D4965
--HG--
extra : moz-landing-system : lando
1. Add network.cookie.QuotaPerHost, which has the default value 150.
2. When the cookies exceed more than 180, evict cookies to 150.
3. The concept of eviction is to sort all cookies by whether the cookie is expired and the cookie's last access time. Then, evict cookies by the given count.
4. Details of evict algorithm:
4.1 Create a priority queue and push all cookies in it.
4.2 Use custom comparator to compare the cookie by expiry and last access.
4.3 Pop 30(180 - 150) cookies from the queue and append them to an output array.
Differential Revision: https://phabricator.services.mozilla.com/D3342
--HG--
extra : moz-landing-system : lando
By delegating responsibility for shared surfaces reporting to imagelib,
we can cross reference the GPU shared surfaces cache with the local
surface cache in a content process (or the main process). This will
allow us to identify entries that are in the GPU cache but not in the
content/main process cache, and aid in debugging memory leaks. This
functionality is pref'd off by default behind image.mem.debug-reporting.
Additionally, we want to report every entry that was mapped into the
compositor process, in the compositor process memory report. This will
give us a sense of how much of our resident memory is consumed by mapped
images in absence of the more detailed cross referencing above.
nsAutoCopyListener is a singleton class but refcountable and a selection
listener. nsFrameSelection adds it to only normal Selection when it's on
macOS or it's enabled by the pref. Additionally, it's always first selection
listener since it's added immediately after Selection instance is created.
So, we can make it a static class, and normal Selection instance should have
a bool to decide whether it should notify nsAutoCopyListener of its changes.
Then, we can save the cost of grabbing it with local RefPtr and the virtual
call.
Additionally, this patch renames nsAutoCopyListener to mozilla::AutoCopyListener
and optimizes constructor of nsFrameSelection (using bool var cache to retrieve
the pref, avoid retrieving the pref on macOS).
Differential Revision: https://phabricator.services.mozilla.com/D4504
--HG--
rename : layout/generic/nsAutoCopyListener.h => layout/generic/AutoCopyListener.h
extra : moz-landing-system : lando
We can access the bool pref in C++ by writing
if (StaticPrefs::layout_css_column_span_enabled()) {
// do something
}
Differential Revision: https://phabricator.services.mozilla.com/D4020
--HG--
extra : moz-landing-system : lando
Currently they cause the `String::from_utf16()` call to return an error result,
and then the subsequent `unwrap()` on that result aborts.
--HG--
extra : rebase_source : 6be81d4d1e618444f762a1ba4e93b5ce648dd45b
Currently, if a get_char() call returns EOF, the index moves beyond the
buffer's bounds and get_char() cannot be called again without triggering a
panic. As a result, everywhere that encounters an EOF and then does subsequent
parsing ungets the EOF... except there was one place that failed to do that:
the match case for CharKind::Slash in get_token(). This meant that a single '/'
at the end of the input could trigger a bounds violation (but only if it is the
start of a new token).
This EOF-unget requirement is subtle and easy to get wrong, so this patch
eliminates it. get_char() now can be called repeatedly after an EOF, and will
return EOF on each subsequent call. This means that some of the existing
unget_char() calls can be removed. Some others are still necessary to get line
numbers correct in error messages, but the outcome of mishandled cases is now
much less drastic -- an incorrect line number in an error message instead of a
panic.
The patch also clarifies a couple of related comments.
--HG--
extra : rebase_source : 62a3f07bb83b95495b2975724876b619a33b5c9d
Still not hooked into telemetry, I talked with :janerik and :gfritzsche about
that, but test incoming!
This intentionally doesn't handle CSSOM and such for now, will file followups
for those, though should be trivial.
I want to unify / clean up how we do the use counters and the error reporting
stuff for CSSOM, since the current function call still shows up in profiles,
but that should be a follow-up.
Differential Revision: https://phabricator.services.mozilla.com/D3828
For feedback, I would like to turn on native Windows Toast backend on
Nightly only.
Differential Revision: https://phabricator.services.mozilla.com/D3004
--HG--
extra : rebase_source : 342ab889043bfacd495366ebf73e2b4eedd6a1c2
In wpt, now we support "offset-path: none | path()", so parsing none or
path function should be correct. Animations which animate "from none"
or "to none" will pass because we could serialize "none", even if we
don't support animations on offset-path.
Depends on D2968
Differential Revision: https://phabricator.services.mozilla.com/D2969
--HG--
rename : testing/web-platform/tests/css/motion/offset-path-string.html => testing/web-platform/tests/css/motion/offset-path-string-001.html
rename : testing/web-platform/tests/css/motion/offset-path-string.html => testing/web-platform/tests/css/motion/offset-path-string-002.html
extra : moz-landing-system : lando
Define the preference. I will enable it only for debug usage and test
coverage in a different patch.
Differential Revision: https://phabricator.services.mozilla.com/D2962
--HG--
extra : moz-landing-system : lando
In wpt, now we support "offset-path: none | path()", so parsing none or
path function should be correct. Animations which animate "from none"
or "to none" will pass because we could serialize "none", even if we
don't support animations on offset-path.
Differential Revision: https://phabricator.services.mozilla.com/D2969
--HG--
rename : testing/web-platform/tests/css/motion/offset-path-string.html => testing/web-platform/tests/css/motion/offset-path-string-001.html
Even after we disable Gecko specific editing UIs by default, web apps can
enable them with execCommand. However, until such web apps change their
behavior, users cannot use Gecko specific UIs. At least for now, we should
make users can enable them by default.
MozReview-Commit-ID: AuAdw4FQ4He
--HG--
extra : rebase_source : a1f88f2928df0d7afb4361c425d75c74872ac9d5
Summary:
Mike DeBoer correctly noted in a comment at https://bugzilla.mozilla.org/show_bug.cgi?id=254592 that enabletimeout is no longer used and should be removed. I updated the timeout logic to treat a zero or negative value as effectively "no automatic timeout" for the quick-find dialog (otherwise, setting the timeout value to a small or negative value makes the feature unusable).
This is a corollary to the bugfix at https://phabricator.services.mozilla.com/D3404 ; I've split it out into a separate patch to avoid confusing that issue.
Update: this specific issue already had its own bug at https://bugzilla.mozilla.org/show_bug.cgi?id=260562, and another mention at https://bugzilla.mozilla.org/show_bug.cgi?id=265915 .
Reviewers: kmag
Reviewed By: kmag
Bug #: 260562
Differential Revision: https://phabricator.services.mozilla.com/D3504
--HG--
extra : rebase_source : 1c2b73d6af1343d536a2380dee784f8ea2339b61
extra : amend_source : cc00a2398b2c478003e842b4dc9b99bf53af6824