Makes immutable a component option rather than a compile option

This allows components to opt in (or out) of using immutable data checking for greater flexibility in app design. It also removes the compiler option.
pull/1164/head
Jacob Wright 8 years ago
parent 9a1d87494d
commit 9e877d9da1

@ -626,6 +626,10 @@ export default class Generator {
addDeclaration('store', templateProperties.store.value);
}
if (templateProperties.immutable) {
addDeclaration('immutable', templateProperties.immutable.value);
}
if (templateProperties.tag) {
this.tag = templateProperties.tag.value.value;
}

@ -207,8 +207,8 @@ export default function dom(
${options.dev && `this._debugName = '${debugName}';`}
${options.dev && !generator.customElement &&
`if (!options || (!options.target && !options.root)) throw new Error("'target' is a required option");`}
${templateProperties.immutable && `if (!('immutable' in options)) options = assign({ immutable: %immutable }, options);`}
@init(this, options);
this._differs = @differs;
${templateProperties.store && `this.store = %store();`}
${generator.usesRefs && `this.refs = {};`}
this._state = @assign(${initialState.join(', ')});
@ -376,7 +376,6 @@ export default function dom(
if (sigil === '@') {
if (name in shared) {
if (options.dev && `${name}Dev` in shared) name = `${name}Dev`;
else if (options.immutable && `${name}Immutable` in shared) name = `${name}Immutable`;
usedHelpers.add(name);
}

@ -52,7 +52,6 @@ export interface CompileOptions {
cssOutputFilename?: string;
dev?: boolean;
immutable?: boolean;
shared?: boolean | string;
cascade?: boolean;
hydratable?: boolean;

@ -76,6 +76,8 @@ export function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
export function observe(key, callback, options) {

@ -0,0 +1,11 @@
import { Validator } from '../../';
import { Node } from '../../../interfaces';
export default function tag(validator: Validator, prop: Node) {
if (prop.value.type !== 'Literal' || typeof prop.value.value !== 'boolean') {
validator.error(
`'immutable' must be a boolean literal`,
prop.value.start
);
}
}

@ -15,6 +15,7 @@ import tag from './tag';
import transitions from './transitions';
import setup from './setup';
import store from './store';
import immutable from './immutable';
export default {
data,
@ -34,4 +35,5 @@ export default {
transitions,
setup,
store,
immutable,
};

@ -55,6 +55,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -98,6 +102,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -243,7 +249,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign(data(), options.data);
if (!document.getElementById("svelte-2794052100-style")) add_css();

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { appendNode, assign, createElement, createText, detachNode, differs, init, insertNode, noop, proto, setAttribute } from "svelte/shared.js";
import { appendNode, assign, createElement, createText, detachNode, init, insertNode, noop, proto, setAttribute } from "svelte/shared.js";
function data() {
return { foo: 42 }
@ -51,7 +51,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign(data(), options.data);
if (!document.getElementById("svelte-2794052100-style")) add_css();

@ -27,6 +27,10 @@ function destroy(detach) {
this._fragment = this._state = null;
}
function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
@ -74,6 +78,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -169,50 +175,63 @@ var proto = {
};
/* generated by Svelte vX.Y.Z */
function a(x) {
return x * 2;
}
var Nested = window.Nested;
function b(x) {
return x * 3;
}
var immutable = true;
function create_main_fragment(state, component) {
var nested = new Nested({
root: component.root,
data: { foo: "bar" }
});
return {
c: noop,
c: function create() {
nested._fragment.c();
},
m: noop,
m: function mount(target, anchor) {
nested._mount(target, anchor);
},
p: noop,
u: noop,
u: function unmount() {
nested._unmount();
},
d: noop
d: function destroy$$1() {
nested.destroy(false);
}
};
}
function SvelteComponent(options) {
if (!('immutable' in options)) options = assign({ immutable: immutable }, options);
init(this, options);
this._differs = differsImmutable;
this._state = assign({}, options.data);
this._recompute({ x: 1 }, this._state);
if (!options.root) {
this._oncreate = [];
this._beforecreate = [];
this._aftercreate = [];
}
this._fragment = create_main_fragment(this._state, this);
if (options.target) {
this._fragment.c();
this._fragment.m(options.target, options.anchor || null);
this._lock = true;
callAll(this._beforecreate);
callAll(this._oncreate);
callAll(this._aftercreate);
this._lock = false;
}
}
assign(SvelteComponent.prototype, proto);
SvelteComponent.prototype._recompute = function _recompute(changed, state) {
if (changed.x) {
if (this._differs(state.a, (state.a = a(state.x)))) changed.a = true;
if (this._differs(state.b, (state.b = b(state.x)))) changed.b = true;
}
};
export default SvelteComponent;

@ -0,0 +1,62 @@
/* generated by Svelte vX.Y.Z */
import { assign, callAll, init, noop, proto } from "svelte/shared.js";
var Nested = window.Nested;
var immutable = true;
function create_main_fragment(state, component) {
var nested = new Nested({
root: component.root,
data: { foo: "bar" }
});
return {
c: function create() {
nested._fragment.c();
},
m: function mount(target, anchor) {
nested._mount(target, anchor);
},
p: noop,
u: function unmount() {
nested._unmount();
},
d: function destroy() {
nested.destroy(false);
}
};
}
function SvelteComponent(options) {
if (!('immutable' in options)) options = assign({ immutable: immutable }, options);
init(this, options);
this._state = assign({}, options.data);
if (!options.root) {
this._oncreate = [];
this._beforecreate = [];
this._aftercreate = [];
}
this._fragment = create_main_fragment(this._state, this);
if (options.target) {
this._fragment.c();
this._fragment.m(options.target, options.anchor || null);
this._lock = true;
callAll(this._beforecreate);
callAll(this._oncreate);
callAll(this._aftercreate);
this._lock = false;
}
}
assign(SvelteComponent.prototype, proto);
export default SvelteComponent;

@ -0,0 +1,10 @@
<Nested foo='bar'/>
<script>
export default {
immutable: true,
components: {
Nested: window.Nested
}
};
</script>

@ -31,6 +31,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -74,6 +78,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -201,7 +207,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
if (!options.root) {

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, callAll, differs, init, noop, proto } from "svelte/shared.js";
import { assign, callAll, init, noop, proto } from "svelte/shared.js";
var Nested = window.Nested;
@ -33,7 +33,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
if (!options.root) {

@ -1,5 +0,0 @@
export default {
options: {
immutable: true
}
};

@ -1,49 +0,0 @@
/* generated by Svelte vX.Y.Z */
import { assign, differsImmutable, init, noop, proto } from "svelte/shared.js";
function a(x) {
return x * 2;
}
function b(x) {
return x * 3;
}
function create_main_fragment(state, component) {
return {
c: noop,
m: noop,
p: noop,
u: noop,
d: noop
};
}
function SvelteComponent(options) {
init(this, options);
this._differs = differsImmutable;
this._state = assign({}, options.data);
this._recompute({ x: 1 }, this._state);
this._fragment = create_main_fragment(this._state, this);
if (options.target) {
this._fragment.c();
this._fragment.m(options.target, options.anchor || null);
}
}
assign(SvelteComponent.prototype, proto);
SvelteComponent.prototype._recompute = function _recompute(changed, state) {
if (changed.x) {
if (this._differs(state.a, (state.a = a(state.x)))) changed.a = true;
if (this._differs(state.b, (state.b = b(state.x)))) changed.b = true;
}
}
export default SvelteComponent;

@ -1,8 +0,0 @@
<script>
export default {
computed: {
a: x => x * 2,
b: x => x * 3
}
};
</script>

@ -31,6 +31,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -74,6 +78,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -194,7 +200,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._recompute({ x: 1 }, this._state);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, differs, init, noop, proto } from "svelte/shared.js";
import { assign, init, noop, proto } from "svelte/shared.js";
function a(x) {
return x * 2;
@ -26,7 +26,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._recompute({ x: 1 }, this._state);

@ -51,6 +51,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -94,6 +98,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -229,7 +235,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
if (!document.getElementById("svelte-3905933315-style")) add_css();

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { appendNode, assign, createElement, detachNode, differs, init, insertNode, noop, proto, setAttribute } from "svelte/shared.js";
import { appendNode, assign, createElement, detachNode, init, insertNode, noop, proto, setAttribute } from "svelte/shared.js";
function encapsulateStyles(node) {
setAttribute(node, "svelte-3905933315", "");
@ -41,7 +41,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
if (!document.getElementById("svelte-3905933315-style")) add_css();

@ -43,6 +43,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -86,6 +90,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -209,7 +215,6 @@ class SvelteComponent extends HTMLElement {
constructor(options = {}) {
super();
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this.attachShadow({ mode: 'open' });

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, createElement, detachNode, differs, init, insertNode, noop, proto } from "svelte/shared.js";
import { assign, createElement, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var div;
@ -29,7 +29,6 @@ class SvelteComponent extends HTMLElement {
constructor(options = {}) {
super();
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this.attachShadow({ mode: 'open' });

@ -31,6 +31,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -74,6 +78,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -196,7 +202,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign(data_1(), options.data);
var _oncreate = oncreate.bind(this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, callAll, differs, init, noop, proto } from "svelte/shared.js";
import { assign, callAll, init, noop, proto } from "svelte/shared.js";
function data_1() {
return {
@ -28,7 +28,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign(data_1(), options.data);
var _oncreate = oncreate.bind(this);

@ -47,6 +47,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -90,6 +94,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -225,7 +231,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, createElement, createText, detachNode, differs, init, insertNode, noop, proto } from "svelte/shared.js";
import { assign, createElement, createText, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var div, text, div_1;
@ -41,7 +41,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -51,6 +51,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -94,6 +98,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -229,7 +235,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, createElement, createText, detachNode, differs, init, insertNode, noop, proto, setAttribute } from "svelte/shared.js";
import { assign, createElement, createText, detachNode, init, insertNode, noop, proto, setAttribute } from "svelte/shared.js";
function create_main_fragment(state, component) {
var div, text, div_1;
@ -41,7 +41,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -51,6 +51,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -94,6 +98,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -227,7 +233,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { appendNode, assign, createSvgElement, detachNode, differs, init, insertNode, noop, proto, setAttribute } from "svelte/shared.js";
import { appendNode, assign, createSvgElement, detachNode, init, insertNode, noop, proto, setAttribute } from "svelte/shared.js";
function create_main_fragment(state, component) {
var svg, g, g_1;
@ -39,7 +39,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -63,6 +63,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -106,6 +110,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -341,7 +347,6 @@ function create_each_block(state, comments, comment, i, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { appendNode, assign, createElement, createText, destroyEach, detachAfter, detachNode, differs, init, insertNode, noop, proto } from "svelte/shared.js";
import { appendNode, assign, createElement, createText, destroyEach, detachAfter, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var text, p, text_1;
@ -141,7 +141,6 @@ function create_each_block(state, comments, comment, i, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -43,6 +43,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -86,6 +90,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -226,7 +232,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, createElement, detachNode, differs, init, insertNode, noop, proto } from "svelte/shared.js";
import { assign, createElement, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
function foo( node, callback ) {
// code goes here
@ -46,7 +46,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -43,6 +43,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -86,6 +90,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -216,7 +222,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { appendNode, assign, createElement, detachNode, differs, init, noop, proto } from "svelte/shared.js";
import { appendNode, assign, createElement, detachNode, init, noop, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var meta, meta_1;
@ -36,7 +36,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -47,6 +47,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -90,6 +94,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -274,7 +280,6 @@ function select_block_type(state) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, createComment, createElement, detachNode, differs, init, insertNode, noop, proto } from "svelte/shared.js";
import { assign, createComment, createElement, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var if_block_anchor;
@ -90,7 +90,6 @@ function select_block_type(state) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -47,6 +47,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -90,6 +94,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -250,7 +256,6 @@ function create_if_block(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, createComment, createElement, detachNode, differs, init, insertNode, noop, proto } from "svelte/shared.js";
import { assign, createComment, createElement, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var if_block_anchor;
@ -66,7 +66,6 @@ function create_if_block(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -47,6 +47,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -90,6 +94,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -223,7 +229,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, createElement, detachNode, differs, init, insertNode, noop, proto, setStyle } from "svelte/shared.js";
import { assign, createElement, detachNode, init, insertNode, noop, proto, setStyle } from "svelte/shared.js";
function create_main_fragment(state, component) {
var div;
@ -39,7 +39,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -47,6 +47,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -90,6 +94,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -218,7 +224,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, createElement, detachNode, differs, init, insertNode, noop, proto, setStyle } from "svelte/shared.js";
import { assign, createElement, detachNode, init, insertNode, noop, proto, setStyle } from "svelte/shared.js";
function create_main_fragment(state, component) {
var div;
@ -34,7 +34,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -47,6 +47,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -90,6 +94,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -218,7 +224,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, createElement, detachNode, differs, init, insertNode, noop, proto, setStyle } from "svelte/shared.js";
import { assign, createElement, detachNode, init, insertNode, noop, proto, setStyle } from "svelte/shared.js";
function create_main_fragment(state, component) {
var div;
@ -34,7 +34,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -47,6 +47,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -90,6 +94,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -229,7 +235,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, createElement, createText, detachNode, differs, init, insertNode, noop, proto } from "svelte/shared.js";
import { assign, createElement, createText, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var div, text, div_1, div_1_style_value;
@ -45,7 +45,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -51,6 +51,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -94,6 +98,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -229,7 +235,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { addListener, assign, createElement, detachNode, differs, init, insertNode, proto, removeListener } from "svelte/shared.js";
import { addListener, assign, createElement, detachNode, init, insertNode, proto, removeListener } from "svelte/shared.js";
function create_main_fragment(state, component) {
var input;
@ -41,7 +41,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -49,6 +49,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -92,6 +96,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -216,7 +222,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, createElement, detachNode, differs, init, insertNode, noop, proto, setInputType } from "svelte/shared.js";
import { assign, createElement, detachNode, init, insertNode, noop, proto, setInputType } from "svelte/shared.js";
function create_main_fragment(state, component) {
var input;
@ -30,7 +30,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -66,6 +66,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -109,6 +113,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -241,7 +247,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, children, claimElement, createElement, detachNode, differs, init, insertNode, noop, proto } from "svelte/shared.js";
import { assign, children, claimElement, createElement, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var div;
@ -38,7 +38,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -59,6 +59,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -102,6 +106,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -282,7 +288,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
if (!options.root) {

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { addListener, assign, callAll, createElement, detachNode, differs, init, insertNode, proto, removeListener, timeRangesToArray } from "svelte/shared.js";
import { addListener, assign, callAll, createElement, detachNode, init, insertNode, proto, removeListener, timeRangesToArray } from "svelte/shared.js";
function create_main_fragment(state, component) {
var audio, audio_is_paused = true, audio_updating = false, audio_animationframe;
@ -86,7 +86,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
if (!options.root) {

@ -45,6 +45,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -88,6 +92,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -224,7 +230,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
if (!options.root) {

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, callAll, createText, detachNode, differs, init, insertNode, noop, proto } from "svelte/shared.js";
import { assign, callAll, createText, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
import Imported from 'Imported.html';
@ -45,7 +45,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
if (!options.root) {

@ -31,6 +31,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -74,6 +78,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -190,7 +196,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._handlers.destroy = [ondestroy];

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, callAll, differs, init, noop, proto } from "svelte/shared.js";
import { assign, callAll, init, noop, proto } from "svelte/shared.js";
function oncreate() {};
@ -22,7 +22,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._handlers.destroy = [ondestroy];

@ -31,6 +31,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -74,6 +78,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -202,7 +208,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, differs, init, noop, proto } from "svelte/shared.js";
import { assign, init, noop, proto } from "svelte/shared.js";
var methods = {
foo ( bar ) {
@ -34,7 +34,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -51,6 +51,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -94,6 +98,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -217,7 +223,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { appendNode, assign, createSvgElement, createText, detachNode, differs, init, insertNode, noop, proto } from "svelte/shared.js";
import { appendNode, assign, createSvgElement, createText, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var svg, title, text;
@ -29,7 +29,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -31,6 +31,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -74,6 +78,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -193,7 +199,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { assign, differs, init, noop, proto } from "svelte/shared.js";
import { assign, init, noop, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var title_value;
@ -25,7 +25,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -55,6 +55,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -98,6 +102,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -440,7 +446,6 @@ function create_if_block_4(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { appendNode, assign, createComment, createElement, createText, detachNode, differs, init, insertNode, noop, proto } from "svelte/shared.js";
import { appendNode, assign, createComment, createElement, createText, detachNode, init, insertNode, noop, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var div, text, p, text_2, text_3, text_4, p_1, text_6, text_8, if_block_4_anchor;
@ -248,7 +248,6 @@ function create_if_block_4(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._fragment = create_main_fragment(this._state, this);

@ -51,6 +51,10 @@ function differs(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
function differsImmutable(a, b) {
return a != a ? b == b : a !== b;
}
function dispatchObservers(component, group, changed, newState, oldState) {
for (var key in group) {
if (!changed[key]) continue;
@ -94,6 +98,8 @@ function init(component, options) {
component.options = options;
component.root = options.root || component;
component.store = component.root.store || options.store;
var immutable = options.immutable !== undefined ? options.immutable : component.root.options.immutable;
component._differs = immutable ? differsImmutable : differs;
}
function observe(key, callback, options) {
@ -241,7 +247,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._state.y = window.scrollY;

@ -1,5 +1,5 @@
/* generated by Svelte vX.Y.Z */
import { appendNode, assign, createElement, createText, detachNode, differs, init, insertNode, proto } from "svelte/shared.js";
import { appendNode, assign, createElement, createText, detachNode, init, insertNode, proto } from "svelte/shared.js";
function create_main_fragment(state, component) {
var window_updating = false, clear_window_updating = function() { window_updating = false; }, window_updating_timeout, p, text, text_1;
@ -53,7 +53,6 @@ function create_main_fragment(state, component) {
function SvelteComponent(options) {
init(this, options);
this._differs = differs;
this._state = assign({}, options.data);
this._state.y = window.scrollY;

Loading…
Cancel
Save